/*!
* Package as: Fri, 04 Jul 2014 02:52:41 +0000
*/


/*! @source "js/core.js" */

﻿var WSCJOINT = WSCJOINT || []; (function($, undefined) {
	/*! 重载 */
	if ($.type($.wscfg) == 'object'){
		return;
	}
	/*! 配置 */
	$.today = new Date();
	$.wscfg = {}; $.extend($.wscfg, {
		/*! 公共 */
		core : {
			base : [ 						// 初始化[插件]
				'accordion', 					// [交替互换] <tag accordion... />
				'ajax', 						// [AJAX请求] <tag ajax... />
				'button',						// [BUTTON] <tag button ... />
				'dialog',						// [Dialog窗口] <tag dialog... />
				'form',							// [FORM表单] <input ... />
				'icon',							// [ICON图标] <tag icon ... />
				'imgview', 						// [IMAGE]图片新窗口显示
				'menu',							// [MENU菜单] <tag menu />
				'profile',                       // [PROFILE名片信息] <tag profile />
				'slider',						// [SLIDER滑块] <div slider ... />
				'tips',							// [TIPS提醒] <div tips />
				'toggle'						// [TOGGLE]折叠
			],
			browser : 'webkit', 			// 浏览器[内核]
			charset : 'utf-8', 				// 编码
			domain : '', 					// 当前域名
			subdomain : '',					// 子域名(二级)
			imgdomain : 'uploadimg',		// 图片主域名
			inits : 0, 						// 载入总数
			msie : false, 					// 是否为IE浏览器
			msiev : 10, 					// IE浏览器版本
			once : [ 						// 初始化[组件]
				'esc', 							// ESC键
				'imgdelay', 					// 图片延迟
				'resize', 						// 窗口尺寸变更
				'service', 						// 全站服务
				'scroll', 						// 滚动条事件
				'sso'							// 单点登陆
			],
			path : '/',						// 全局路径
			proxy : '/cross.php?url=', 		// 跨域代理
			refer : '',						// HTTP_REFERER
			version : '1.0.0' 				// 版本号
		}, 
		today : {							// 当前日期
			y : $.today.getFullYear(), 			// 年份[YYYY]
			m : $.today.getMonth()+1, 			// 月份[1-12]
			d : $.today.getDate() 				// 日期[1-31]
		}, 
		plugins : {}
	});
	/*!
	* 包含
	*/
	$.fn.require = function(o, fn){
		/**
		* Ajax载入外部
		* @param object o = {}
		*        <code>o.url</code>, 载入URL路径
		*        <code>o.cache</code>, 缓存优先
		*        <code>o.data</code>, 数据参数[jQuery.plainObject]
		*        <code>o.dataType</code>, 数据类型(HTML|JSON|XML|SCRIPT)
		*        <code>o.type</code>, 请求方式(GET|POST|PUT|DELETE)
		* @param function fn, 回调方法
		*        <code>data</code>, 传递给fn首参数
		*        <code>object</code>, 传递给fn次参数[ajax.settings]
		*/
		var a = {cache : true, data : '', dataType : 'html', type : 'GET', url : null}, 
			o = $.isPlainObject(o) ? o : {};
		if (o.url){
			var _prefix = o.url.substr(0, 1); if (_prefix == '~'){
				o.url = o.url.replace(/^~/, $.wscfg.core.path); }
				o.url = o.url.replace(/&amp;/ig, '&');
			/*! 请求路径 */
			a.url = o.url;
			/*! 缓存控制[限boolean] */
			if ($.type(o.cache) == 'boolean' && !o.cache){
				a.cache = false;
			}
			/*! 数据参数[二种格式]
			* @var o.data = {'k1' : 'v1', 'k2' : 'v2'}
			* @var o.data = 'k1=v1&k2=v2';
			*/
			if ($.isPlainObject(o.data)){
				a.data = o.data;
				a.data.wscajax = 1;
			} else {
				if ($.type(o.data) == 'string' && o.data != ''){
					a.data = o.data;
					a.data += '&';
				} a.data += 'wscajax=1';
			}
			/*! 返回格式
			* @var o.dataType = 'html'
			* @var o.dataType = 'json'
			* @var o.dataType = 'xml'
			* @var o.dataType = 'script'
			*/
			if ($.type(o.dataType) == 'string' && o.dataType != ''){
				a.dataType = o.dataType.toLowerCase();
			}
			/*! 样式附加 */
			if (a.dataType == 'css'){
				$('head').append('<link href="'+a.url+'" rel="stylesheet" type="text/css" />'); try{
					fn(o, a);
				}catch(err){} return;
			} 
			/*! 请求类型 
			* @var o.type = 'GET'
			* @var o.type = 'POST'
			* @var o.type = 'PUT'
			* @var o.type = 'DELETE'
			*/
			if ($.type(o.type) == 'string'){
				a.type = o.type; if (o.type.toUpperCase() != 'GET'){
					a.cache = false; 
				}
			}
			/**
			* 跨域检查
			*/
			var b = function(_status, _response){
				var _title = null;
				/*!
				* JSON请求
				*/
				if (a.dataType == 'json'){
					/*!
					* Plain-Object
					*/
					if (!$.isPlainObject(_response)){
						_response = {};
					}
					/*!
					* 类型
					*/
					if ($.type(_response.errno) == 'undefined'){
						_response.errno = -1;
					} if ($.type(_response.error) == 'undefined'){
						_response.error = '';
					}
				}
				/*!
				* HTML请求时文档去除公共部分
				*/
				else if (_response && a.dataType == 'html'){
					/*! 过渡格式 */
					_response = _response.replace(/\n/g, '</br/>');
					_response = _response.replace(/\r/g, '');
					/*! 规则匹配 */
					var _e_body = /\<body([^\>]*)\>(.*)\<\/body\>/i,
						_e_note = /\<\!\-\-\(wscajax\)\-\-\>(.*)\<\!\-\-\(\/wscajax\)\-\-\>/i, 
						_e_name = /\<title\>(.*)\<\/title\>/i;
					var _m_name = _e_name.exec(_response) || []; if (_m_name.length){
						_title = _m_name[_m_name.length-1];
					}
					var _m_node = _e_note.exec(_response) || []; if (_m_node.length){
						_response = _m_node[_m_node.length-1];
					} else {
						var _m_body = _e_body.exec(_response) || []; if (_m_body.length){
							_response = _m_body[_m_body.length-1];
						}
					}
					/*! 恢复[\r\n]格式 */
					_response = _response.replace(/\<\/br\/\>/ig, "\r\n");
				}
				/*!
				* 回调
				*/
				try{
					fn(a, _response, _title);
				}catch(err){}
			};
			/**
			* AJAX附加参数
			*/
			if ($.type(o.beforeSend) == 'function'){
				a.beforeSend = o.beforeSend;
			}
			/**
			* AJAX请求
			*/
			if (a.dataType != 'script'){
				var _cross = $.fn.urlobj(a.url); if (_cross.cross){
					a.url = _cross.cross;
				}
			} $.ajax(a).fail(function(err){
				b(err.status, err.responseText);
			}).done(function(_response){
				b(200, _response);
			});
		}
	};
	/*! 载入 */
	$.fn.extend({
		wscbase : function(){
			var obj = $(this); if (obj.length){
				/*!
				* 全局初始化
				*/
				$($.wscfg.core.base).each(function(_k, _v){
					try{
						eval('obj.wscbase_'+_v+'()');
					}catch(err){}
				});
				/*!
				* 页面初始化
				*/
				try{
					obj.pageload();
				}catch(err){}
			} return obj;
		},
		wsconce : function(){
			var obj = $(this); if (obj.length){
				/*!
				* 全局一次性
				*/
				$($.wscfg.core.once).each(function(_k, _v){
					try{
						eval('obj.wsconce_'+_v+'()');
					}catch(err){}
				});
				/*!
				* 页面一次性
				*/
				try{
					obj.pageonce();
				}catch(err){}
			} return obj;
		},
		wscload : function(){
			/*! 范围 */
			var obj = $(this); if (!obj.length){
				return;
			}
			/*! 首载 */
			if ($.wscfg.core.inits == 0){
				/*! 路径 */
				var _path_match = 'jquery.js', 
					_path_source = $('html').find('script[src$="'+_path_match+'"]').first().attr('src');
				$.wscfg.core.path = _path_source.replace(_path_match, '');
				/*! 域名 */
				var _domain_host = document.domain, 
					_domain_array = _domain_host.toString().toLowerCase().split('.'), 
					_domain_length = _domain_array.length, 
					_domain_sub = _domain_array.slice(1);
				$.wscfg.core.predomain = _domain_array[0];	
				$.wscfg.core.subdomain = _domain_sub.join('.');
				var _domain_ext = _domain_array.slice(_domain_length-2).join('.'); if ($.inArray(_domain_ext, ['com.cn', 'net.cn', 'org.cn', 'gov.cn']) != -1){
					_domain_ext = _domain_array.slice(_domain_length-3).join('.');
				} $.wscfg.core.domain = _domain_ext; document.domain = $.wscfg.core.domain;
				/*! 浏览器 */
				var _uagent = navigator.userAgent.toLowerCase(), 
					_uagent_trident = /trident\/([\w.]+)/.exec(_uagent) || [];
				if (_uagent_trident.length){
					$.wscfg.core.msie = true;
					$.wscfg.core.msiev = parseInt(_uagent_trident[1]);
					$.wscfg.core.msiev += 4;
				} else {
					var _uagent_msie = /msie\s*([\w.]+)/.exec(_uagent) || []; if (_uagent_msie.length){
						$.wscfg.core.msie = true;
						$.wscfg.core.msiev = parseInt(_uagent_msie[1]);
					}
				} if ($.wscfg.core.msie){
					/*!
					* IE浏览器文档模式兼容
					*/
					var _msie_doc_mode = document.documentMode || null; if (_msie_doc_mode && _msie_doc_mode.toString().match(/^[0-9]$/)){
						$.wscfg.core.msiev = parseInt(_msie_doc_mode); 
					} $.wscfg.core.browser = $.wscfg.core.msiev > 8 ? 'ms' : 'ie'+$.wscfg.core.msiev;
				} else {
					if (_uagent.match(/gecko\/([\w.]+)/)){
						$.wscfg.core.browser = 'moz';
					}
				}
				/*! 样式 */
				var _css_match = 'wscui.css',  
					_css_source = $('html').find('link[href$="'+_css_match+'"]').first().attr('href'),
					_css_append = ''; if (_css_source){
					_css_append += '<link href="'+_css_source.replace(_css_match, '')+$.wscfg.core.browser+'/'+_css_match+'" rel="stylesheet" type="text/css" />';}
					_css_append += '<style type="text/css">';
					_css_append += '.inline {';
					_css_append += $.wscfg.core.msie && $.wscfg.core.msiev < 8 ? 'margin-right:3px;display:inline;zoom:1;' : 'display:inline-block;';
					_css_append += '}';
					_css_append += '</style>';
					$('head').append(_css_append);
				/*! 组件 */
				obj.wsconce();
			} 
			/*! 插件 */
			obj.wscbase();
			/*! 返回 */
			$.wscfg.core.inits++;
			return obj;
		}
	});
})(jQuery);

/*! @source "js/base/accordion.js" */

﻿/*!
* Accordion
*/
(function($, undefined) {
	/*! 配置 */
	$.extend($.wscfg, {
		accordion : {
			offset : 0, 
			speed : 150, 
			iconcolor : 'gray',
			cookiehour : 365, 
			cookiename : 'wscui-accordion',
			cookievalue : []
		}
	});
	/*! 遍历 */
	$.fn.extend({
		wscbase_accordion : function(){
			/*!
			* 首次载入
			*/
			if ($.wscfg.accordion.offset == 0){
				var _cookies = $.fn.setcookie($.wscfg.accordion.cookiename); if (_cookies && _cookies[$.wscfg.accordion.cookiename]){
					var _cookied = _cookies[$.wscfg.accordion.cookiename]; $.wscfg.accordion.cookievalue = _cookied.split(',');
				}				
			} $.wscfg.accordion.offset++;
			/*!
			* 初始化
			*/
			var obj = $(this); if (obj.length){
				obj.find('[accordion]').each(function(){
					var tmp = $(this); if (!tmp.attr('accordion-inited')){
						tmp.attr('accordion-inited', true).accordion_init();
					}
				});
			} return obj;
		}
	});
	/*! 方法 */
	$.fn.extend({
		/*!
		* 初始结构
		*/
		accordion_init : function(){
			var o = {};
				o.wrap = $(this);
			/*!
			* 单项
			*/
			var i = 0; o.wrap.find('> *').each(function(){
				var handle = $(this); if (handle.attr('accordion-ignore') != 'true'){
					i++; if (i%2 > 0){
						var e = {};
							e.wrap = o.wrap;
							e.handle = handle;
							e.item = e.handle.next();
						e.handle.accordion_data(e).unbind('click').bind('click', function(){
							e.item.accordion_toggle(e);
						});
					}
				}
			});
			/*!
			* 返回
			*/
			return o.wrap;
		}, 
		/*!
		* Cookie
		*/
		accordion_cookie : function(del){
			var obj = $(this), 
				_cookie = obj.attr('accordion-cookie');
			if ($.type(_cookie) == 'string' && _cookie != ''){
				var _cookies = $.wscfg.accordion.cookievalue, 
					_cookied = '';
				/*!
				* 删除
				*/
				if (del){
					if ($.inArray(_cookie, _cookies) != -1){
						var _temp = []; $(_cookies).each(function(k, v){
							if (v != _cookie){
								_temp.push(v);
							}
						}); $.wscfg.accordion.cookievalue = _temp;
					}
				}
				/*!
				* 设置
				*/
				else {
					$.wscfg.accordion.cookievalue.push(_cookie);
				}
				/*!
				* 删除Cookie
				*/
				_cookied = $.wscfg.accordion.cookievalue.join(','); if (_cookied == ''){
					$.fn.setcookie($.wscfg.accordion.cookiename, false);
				}
				/*!
				* 写入Cookie
				*/
				else {
					$.fn.setcookie($.wscfg.accordion.cookiename, _cookied, $.wscfg.accordion.cookiehour);
				}
			} return obj;
		},
		/*!
		* 状态与方法
		*/
		accordion_data : function(o){
			/*!
			* 状态
			*/
			var _hider = false, 
				_class = 'wsc-accordion-on';
			if (o.item.css('display') == 'none'){
				_class = 'wsc-accordion-off';
			} else {
				var _cookie = o.handle.attr('accordion-cookie'); if (_cookie && $.inArray(_cookie, $.wscfg.accordion.cookievalue) != -1){
					_hider = true;
					_class = 'wsc-accordion-off';
				}
			}
			/*!
			* 强制隐藏
			*/
			o.item.addClass('wsc-accordion-item');if (_hider){
			o.item.css('display', 'none'); }
			o.handle.addClass('wsc-accordion-handle '+_class);
			/*!
			* 方法
			*/
			o.handle.attr('accordion-handle', true).data({
				open : function(){
					o.item.addClass('wsc-ui-static').stop().slideDown($.wscfg.accordion.speed, function(){
						$(this).removeClass('wsc-ui-static');
						o.handle.removeClass('wsc-accordion-off').addClass('wsc-accordion-on');
						o.handle.accordion_cookie(true);
					});
				}, close : function(){
					o.item.addClass('wsc-ui-static').stop().slideUp($.wscfg.accordion.speed, function(){
						$(this).removeClass('wsc-ui-static');
						o.handle.removeClass('wsc-accordion-on').addClass('wsc-accordion-off');
						o.handle.accordion_cookie();
					});
				}
			});
			/*!
			* 图标
			*/
			if (o.handle.attr('accordion-icon') != 'false'){
				var _color = o.handle.attr('accordion-color') || $.wscfg.accordion.iconcolor;
				o.handle.prepend('<span class="inline wsc-accordion-icon '+_color+'" />');
			}
			/*!
			* 返回
			*/
			return o.handle;
		}, 
		/*!
		* 执行事件
		* @param object o, 接受参数
		*               object wrap, 容器
		*               object handle, 点击项
		*               object item, 交替项
		*/
		accordion_toggle : function(o){
			var uni = o.wrap.attr('accordion-unique') == 'true';
			/*!
			* UNIQUE
			*/
			if (uni){
				o.handle.attr('accordion-wait', true); o.wrap.find('[accordion-handle]').each(function(){
					if ($(this).attr('accordion-wait')){
						$(this).attr('accordion-wait', null).data('open')();
					} else {
						$(this).data('close')();
					}
				}); return true;
			}
			/*!
			* 显示
			*/
			if (o.item.css('display') == 'none'){
				o.handle.data('open')();
			} 
			/*!
			* 隐藏
			*/
			else {
				o.handle.data('close')();
			}
		}
	});

})(jQuery);

/*! @source "js/base/ajax.js" */

﻿/*!
* 注册Ajax点击(click)事件
* 属性支持
* <ul>
* <li>string[ajax], 必须(get,post)</li>
* <li>string[ajax-href], 请求地址</li>
* <li>string[ajax-type], 返回格式(html,json,xml,script)</li>
* <li>boolean[ajax-cache], 是否缓存(true, false)</li>
* <li>string[ajax-selector], 结果填充</li>
* <li>boolean[ajax-selector-append], 末尾追加</li>
*
* <li>function[ajax-start], 请求先执行</li>
* <li>function[ajax-stop], 执行后回调</li>
* </ul>
* @example <a ajax="post" ajax-type="json" href="http://www.example.com">链接</a>
*/
(function($, undefined) {
	/*! 配置 */
	$.extend($.wscfg, {
		ajax : {
			inits : 0, 
			cfm : '确认要保存吗?'
		}
	});
	/*! 遍历 */
	$.fn.extend({
		wscbase_ajax : function(){
			var obj = $(this) || {};
			/**
			* 无效
			*/
			if (!obj.length){
				return obj;
			}
			/**
			* 遍历
			*/
			obj.find('[ajax]').each(function(){
				if (!$(this).attr('ajax-inited')){
					$.wscfg.ajax.inits++; $(this).attr({'ajax-inited' : true}).unbind('click').click(function(e){
						var clk = $(this); e.preventDefault();
						/*!
						* 禁用
						*/
						if (clk.attr('ajax-disabled') == 'true'){
							return false;
						}
						/*!
						* 确认
						*/
						var cfm = clk.attr('ajax-confirm') || clk.attr('confirm'); if ($.type(cfm) != 'undefined'){
							var cfm = cfm || $.wscfg.ajax.cfm; $.fn.wscalert({
								text : cfm, type : 'info', call : function(){
									clk.wscajax();
								}
							}); return false;
						}
						/*!
						* 请求
						*/
						clk.wscajax();
					});
					/*!
					* 载入
					*/
					if ($(this).attr('ajax-load') === 'true'){
						$(this).click();
					}
				}
			});
			/**
			* 递进
			*/
			return obj;
		}
	});
	/*! Open Dialog */
	$.fn.wscajax = function(o){
		/*!
		* 接受参数
		* @param object o = {
		*     obj : object, 		// jQuery-Selector
		*     url : string, 		// http://www.example.com
		*     mime : string, 		// html|xml|json
		*     type : string, 		// get|post|put|delete
		*     cache : boolean, 		// true|false
		*     data : object|string,	// {'k' : 'v', 'n' : 's'} | k=v&n=s
		*     selector : string,	// #example
		*     start : function, 	// 
		*     stop : function		// 
		* }
		*/
		var o = o || {}, a = {type : 'get'};
			o.obj = o.obj || $(this) || null; if (!o.obj){return;}
			a.url = o.url || o.obj.attr('ajax-href') || o.obj.attr('href') || null; if (!a.url || a.url.match(/^javascript:/i) || a.url.match(/^#/)){return;}
		/*!
		* 类型
		*/
		a.type = 'get'; o.type = o.type || o.obj.attr('ajax') || null; if (o.type){
		a.type = o.type.toString().toLowerCase(); }
		/*!
		* 缓存
		*/
		a.cache = true; o.cache = o.obj.attr('ajax-cache') || null; if (o.cache && o.cache.toString().toLowerCase() == 'false'){
		a.cache = false; }
		/*!
		* 返回
		*/
		a.dataType = 'html'; o.mime = o.mime || o.obj.attr('ajax-mime') || null; if (o.mime && o.mime.toString() != ''){
		a.dataType = o.mime; }
		/*!
		* 参数
		*/
		a.data = {}; if (o.data){
		a.data = o.data;} else {o.data = o.obj.attr('ajax-data') || null; if (o.data){
		a.data = o.data.toString(); }}
		/*!
		* 开始
		*/
		if (o.start && $.type(o.start) == 'function'){
			a.beforeSend = function(){
				o.start(o.obj, a);
			};
		} else {
			a.beforeSend = function(){
				try{
					o.obj.data('ajax-start')(o.obj, a);
				}catch(err){}
			};
		}
		/*!
		* 容器
		*/
		var ajaxtoggle = $.type(o.obj.attr('ajax-toggle')) != 'undefined', 
			container = null; o.selector = o.selector || o.obj.attr('ajax-selector') || null; if (o.selector){
			container = $(o.selector); }
		/*!
		* 允许折叠
		*/
		if (ajaxtoggle && container){
			var _open = o.obj.attr('ajax-toggle-open'), 
				_opened = false; 
			if (_open && _open.toString().toLowerCase() == 'true'){
				_opened = true;
			} if (_opened){
				o.obj.attr('ajax-toggle-open', null);
				container.css('display', 'none');
				return;
			} else {
				o.obj.attr('ajax-toggle-open', true);				
				container.css('display', 'block');
			}
		}
		/*!
		* 请求
		*/
		$.fn.require(a, function(_ajax, _response, _title){
			/*!
			* 完成
			*/
			if (container){
				if ($.type(o.obj.attr('ajax-selector-append')) == 'undefined'){
					container.html(_response);
				} else {
					container.append(_response);
				} container.wscload().css('display', 'block').imgdelay();
			}
			/*!
			* 结束
			*/
			if (o.stop && $.type(o.stop) == 'function'){
				o.stop(o.obj, a, _response);
			} else {
				try{
					o.obj.data('ajax-stop')(o.obj, a, _response);
				}catch(err){}
			}
		});
	};
})(jQuery);

/*! @source "js/base/button.js" */

/*!
* 注册文档载入自动初始化按钮事件
* 属性支持
* <ul>
* <li>string[button], 必须</li>
* <li>string[button-inline], 并排显示按钮</li>
* <li>boolean[button-icon], 按钮图标属性</li>
* <li>boolean[button-icon-pos], 按钮图标相对于文本的位置</li>
* <li>boolean[button-no-ui], 不初始化按钮ui</li>
* <li>boolean[button-disabled], 按钮被禁用或启用</li>
* <li>boolean[button-inited], 保护属性/禁止定义</li>
* </ul>
* @example <a button href="http://www.example.com">链接</a>
*/

(function($, undefined){
	/*! 配置 */
	$.extend($.wscfg, {
		button : {
			inits : 0
		}
	});
	/*! 遍历 */
	$.fn.extend({
		wscbase_button : function(){
			var obj = $(this) || {};
			/**
			* 无效
			*/
			if (!obj.length){
				return obj;
			}
			/*
			* 初始元素/各元素配置
			* @var cfg = {
			* }
			*/
			obj.find('button, [button]').each(function(){
				if (!$(this).attr('button-inited')){
					var src = 'wscore-button-' + $.wscfg.button.inits; 
					$.wscfg.button.inits++; 
					$(this).attr({'button-inited' : true, 'button-index' : src}).wscbuttoninit(); // 自动button化
				}
			});
			/**
			* 递进
			*/
			return obj;
		},
		/*!
		* EVENT
		* @method wscbase_button_event
		*/
		wscbase_button_event : function(o){
			var obj = $(this);
			/*!
			* 返回
			*/
			return obj;
			/*!
			*	用户事件
			*/
			if (o._no_event == 'true' || o._no_event) {}
		} 	
	});	
	
	

	$.fn.wscbuttoninit = function(){
		/*！
		*	提取初始化对象	
		*/
		var o = {src : $(this)}; if (o.src.length == 0){return;} 
		/*! 初始化 */
		/*! Button 属性 */
		var	_no_ui = o.src.attr('button-no-ui') || false; // button ui not enabled; default false
		if (_no_ui == true || _no_ui == 'true') { return; }// if no ui, quit function
		var _theme = o.src.attr('button') || 'a', // button主题; default: a
			_inline = o.src.attr('button-inline') || true, // button inline or not; default: false
			_icon = o.src.attr('button-icon') || null, // button icon string; default: null
			_icon_pos = o.src.attr('button-icon-pos') || 'left', // button icon position; default: left
			_disabled = o.src.attr('button-disabled') || false, // button disabled or not; default: false
			_no_event = o.src.attr('button-no-event') || false, 
			_no_text = o.src.attr('button-no-text') || false; // button no text; default false
		o._no_event =  _no_event;
		o._theme = _theme;
		o._inline = _inline;
		o._icon = _icon;
		o._disabled = _disabled;
		o._no_text = _no_text;
		o._no_ui = _no_ui;

		/*
		*	根据button属性设置 改变原对象html (添加css class)
		*
		*
		* 1. 对初始化对象添加class
		*/
		o.src.addClass('wsc-button-text wsc-button-src');
		if (_no_text || _no_text=='true') {
			o.src.css('display','none');
		}
		/*
		* 2. 创建icon容器 
		*/
		var button_icon = '';
		if (_icon) {
			button_icon += '<div class="wsc-icon-img icon-'+_icon+'"></div>';
		}
		/*
		* 3. 创建顶部容器 (包括icon位置)
		*/
		var button_wrapper = '<div class="'+ (_disabled!=false?'wsc-button-disabled ':'') +' '+ (_inline=="false"?'':'inline ') + 'wsc-button wsc-button-icon-pos-'+_icon_pos+' '+_theme+'"></div>';
		o.src.wrap(button_wrapper);
		if (_icon_pos == 'top') {
			o.src.before(button_icon);
		}else {
			o.src.after(button_icon);
		}
		/*! 注册父级容器事件传递给子级初始化对象 */
		if (_disabled) {
			o.src.click(function(e){
				e.preventDefault();
			});			
		}
	};	


})(jQuery);

/*! @source "js/base/dialog.js" */

﻿/*!
* 注册弹出窗口点击(click)事件
* 属性支持
* <ul>
* <li>string[dialog], 必须</li>
* <li>boolean[dialog-no-esc], 禁ESC键关闭</li>
* <li>boolean[dialog-no-title], 无标题栏</li>
* <li>boolean[dialog-no-drag], 禁止拖拽(jQuery-UI支持)</li>
* <li>boolean[dialog-no-masker], 禁止半透明覆盖层</li>
* <li>int[dialog-width], 固定宽度</li>
* <li>int[dialog-height], 固定高度</li>
* <li>string[dialog-selector], jQuery选择器项</li>
*
* <li>boolean[dialog-inited], 保护属性/禁止定义</li>
* <li>string[dialog-src], 保护属性/禁止定义</li>
* </ul>
* @example <a dialog dialog-width="500" href="http://www.example.com">链接</a>
*/
(function($, undefined) {
	/*! 配置 
	* @var int inits, 初始化数量
	* @var boolean unique, 唯一标识
	* @var int speed, 动画速度(毫秒)
	* @var int width, 强制宽度
	* @var int height, 强调高度
	* @var int minwidth, 最小宽度
	* @var int minheight, 最小高度
	* @var int maxwidth, 最大宽度
	* @var int maxheight, 最大高度
	* @var int zindex, 起始z-index值
	* @var string target, 链接标识
	* @var string theme, 默认样式
	* @var object pos, 支持位置
	* @var object lang, 语言包
	*/
	$.extend($.wscfg, {
		dialog : {
			inits : 0, 
			unique : true, 
			speed : 150, 
			width : 460, height : 0, 
			minwidth : 300, minheight : 45, maxwidth : 0, maxheight : 0, 
			zindex : 2000, 
			target : 'wscore-dialog-', 
			theme : 'a', 
			pos : ['side'], 
			lang : {
				close : '关闭', 
				error : '载入数据错误', 
				btnyes : '确定', 
				btnno : '取消'
			}
		}
	});
	/*! 遍历
	* @note 全部dialog属性
	*/
	$.fn.wscbase_dialog = function(){
		var obj = $(this); obj.find('[dialog]').each(function(){
			if (!$(this).attr('dialog-inited')){
				$(this).attr('dialog-inited', true).unbind('click').click(function(e){
					e.preventDefault();
					$(this).wscdialog_click();
				});
			}
		});
	};
	/*!
	* 点击
	*/
	$.fn.wscdialog_click = function(){
		var o = $(this).wscdialog_setting(); if (o){
			$.fn.wscdialog_open(o);
		}
	};
	/*!
	* 初始化
	* @return obj = {
	*     start : function(){...},
	*     stop : function(){...}
	* }
	*/
	$.fn.wscdialog_setting = function(obj){
		var o = {obj  : obj || $(this)}; if (o.obj.length != 1){return;}
			o.url = o.obj.attr('dialog-href') || o.obj.attr('href') || null;
		/*!
		* 跨顶级域登陆/注册
		*/
		var iscro = o.url ? $.fn.urlobj(o.url) : {cross : ''}; if (iscro.cross){
			if ($.inArray($.wscfg.core.domain, ['wudao.com', 'wuzhe.com', 'chinadance.com', 'wudaotai.com', 'dance365.com']) == -1 && o.url.match(/\/site\/([login|reg])/i)){
				o.url += o.url.match(/\?/) ? '&' : '?';
				o.url += 'nolayout=1';
				$.fn.redirect(o.url);
				return false;
			}
		}
		/*!
		* 样式
		*/
		o.theme = o.obj.attr('dialog');
		o.pos = o.obj.attr('dialog-pos'); if ($.inArray(o.pos, $.wscfg.dialog.pos) == -1){
		o.pos = 'center';}
		o.noesc = o.obj.attr('dialog-no-esc') == 'true';
		o.nodrag = o.obj.attr('dialog-no-drag') == 'true';
		o.nomask = o.obj.attr('dialog-no-masker') == 'true';
		o.selector = o.obj.attr('dialog-selector');
		/*!
		* 标题
		*/
		o.notitle = o.obj.attr('dialog-no-title') == 'true'; if (!o.notitle){
		o.title = o.obj.attr('dialog-title'); if (o.title){
		o.titlefixed = true; }
		o.title = o.title || o.obj.attr('title') || o.obj.text() || '';}
		/*!
		* 尺寸
		*/
		$(['width', 'height', 'minwidth', 'minheight', 'maxwidth', 'maxheight']).each(function(k, v){
			var _size = o.obj.attr('dialog-'+v); if (_size && _size.match(/^([0-9]+)$/)){
				_size = _size * 1; if (_size > 0){
					o[v] = _size;
				}
			}
		});
		/*!
		* 按钮
		*/
		var _btn = o.obj.attr('dialog-button'); if (_btn){
			o.button = {}; $(_btn.split(',')).each(function(k, v){
				o.button[v] = true; 
				o.button[v+'text'] = o.obj.attr('dialog-button-'+v) || null;
				o.button[v+'call'] = o.obj.data('dialog-button-'+v) || null;
			});
		}
		/*!
		* 方法
		*/
		o.start = o.obj.data('dialog-start');
		o.stop = o.obj.data('dialog-stop');
		return o;
	};
	/*!
	* 显示Dialog
	* @param object {
	*     obj : object, // 当前被点击的元素
	*     _src : string, // Dialog-SRC链接
	* }
	*/
	$.fn.wscdialog_open = function(o){
		var o = o || {};
			o._src = '';
		/*!
		* 链接SRC
		*/
		if (o.obj){
			o._src += o.obj.attr('dialog-src') || ''; 
		} if (o._src == ''){
			o._src += $.wscfg.dialog.target; if ($.wscfg.dialog.unique){
			o._src += 'uuid'; } else {
			o._src += $.wscfg.dialog.inits; $.wscfg.dialog.inits++; }
			/*!
			* 附加
			*/
			if (o.obj){
				o.obj.attr('dialog-src', o._src);
			}
		}
		/*!
		* 窗体OBJ
		*/
		o._box = $('[dialog-src-target="'+o._src+'"]'); if (o._box.length == 0){
			var htm = '';
			/*!
			* 建立窗体
			*/
			htm += '<div dialog-src-target="'+o._src+'" class="wsc-dialog wsc-ui-static">';
			htm += '<div class="wsc-dialog-wrap">';
				/*!
				* X按钮
				*/
				htm += '<a dialog-close title="'+$.wscfg.dialog.lang.close+'" href="javascript:void(0)" class="wsc-dialog-close inline"></a>';
				htm += '<div dialog-title class="wsc-dialog-title"><h3>&#160;</h3></div>';
				htm += '<div dialog-body class="wsc-dialog-body wsc-ui-static">&#160;</div>';
				htm += '<div dialog-button class="wsc-dialog-button"></div>';
			htm += '</div>';
			htm += '</div>';
			htm += '<div dialog-src-masker="'+o._src+'" class="wsc-dialog-masker wsc-ui-static"></div>';
			/*!
			* 重新赋值
			*/
			$('body').append(htm); o._box = $('[dialog-src-target="'+o._src+'"]'); if (o._box.length != 1){
				return;
			}
		}
		/*!
		* 关闭已打开窗口
		*/
		var _close = o._box.data('close'); if ($.type(_close) == 'function'){
			_close(function(){$.fn.wscdialog_open(o);}); return;
		} o._boxmask = $('[dialog-src-masker="'+o._src+'"]');
		/*!
		* 标题栏
		* @var boolean o.notitle, 是否禁用标题栏
		* @var string o.title, 标题栏内容
		* @var boolean o.titlefixed, 固定标题
		*/
		o._boxtitle = o._box.find('[dialog-title]'); if (!o.notitle && o.title && o._boxtitle.length == 1){
			o._boxtitle.css('display', 'block').find('h3').text(o.title);
		} else {
			o._boxtitle.css('display', 'none');
		}
		/*!
		* 按钮
		* @var object o.button {
		*     yes : boolean, 
		*     yestext : string
		*     no : boolean, 
		*     notext : string
		* }
		*/
		o._boxbtns = o._box.find('[dialog-button]'); if (o._boxbtns.length == 1){
			var _btntext = ''; if (o.button){
				if (o.button.yes){
					_btntext += '<a dialog-close dialog-button-yes href="javascript:void(0)" class="d-btn yes inline">';
						_btntext += o.button.yestext || $.wscfg.dialog.lang.btnyes;
					_btntext += '</a>';
				} if (o.button.no){
					_btntext += '<a dialog-close dialog-button-no href="javascript:void(0)" class="d-btn no inline">';
						_btntext += o.button.notext || $.wscfg.dialog.lang.btnno;
					_btntext += '</a>';
				} o._boxbtns.html(_btntext);
			} o._boxbtns.css('display', _btntext == '' ? 'none' : 'block');
		}
		/*!
		* 样式配置
		*/
		var _theme = o._box.attr('dialog-theme');  o.theme = o.theme || $.wscfg.dialog.theme; if (_theme && _theme != o.theme){
			o._box.removeClass(_theme);
		} o._box.attr('dialog-theme', o.theme).addClass(o.theme);
		/*!
		* 尺寸
		*/
		o._boxbody = o._box.find('[dialog-body]'); if (o._boxbody.length == 1){
			var bcs = {};
			o.width = o.width || $.wscfg.dialog.width || 0;
			o.height = o.height || $.wscfg.dialog.height || 0;
			o.minwidth = o.minwidth || $.wscfg.dialog.minwidth || 0;
			o.minheight = o.minheight || $.wscfg.dialog.minheight || 0;
			o.maxwidth = o.maxwidth || $.wscfg.dialog.maxwidth || 0;
			o.maxheight = o.maxheight || $.wscfg.dialog.maxheight || 0;
			if (o.width > 0){
				bcs['width'] = o.width;
			} if (o.height > 0){
				bcs['height'] = o.height;
			} if (o.minwidth > 0){
				bcs['min-width'] = o.minwidth;
			} if (o.minheight > 0){
				bcs['min-height'] = o.minheight;
			} if (o.maxwidth > 0){
				bcs['max-width'] = o.maxwidth;
			} if (o.maxheight > 0){
				bcs['max-height'] = o.maxheight;
			} o._boxbody.css(bcs);
		}
		/*!
		* 事件
		* @var boolean o.nomask
		* @var object o._boxmask,
		*/
		var datas = {
			/*!
			* 弹窗定位
			*/
			'pos' : function(){
				var vcs = {};
				/*!
				* 被点击位置
				*/
				if (o.pos == 'side'){
					var _maxw = Math.max($(document).outerWidth(), $('body').outerWidth());
					/*!
					* 左右
					*/
					vcs.left = o.obj.offset().left;
					vcs.left += o.obj.outerWidth(); if ((vcs.left + o._box.outerWidth()) > _maxw){
					vcs.left = o.obj.offset().left - o._box.outerWidth(); }
					/*!
					* 上下
					*/
					var _winh = $(window).height(), 
						_maxh = Math.max($(document).outerHeight(), $('body').outerHeight()),
						_scrt = $(window).scrollTop();
					vcs.top = o.obj.offset().top; if ((vcs.top + o._box.outerHeight()) > (_winh + _scrt)){
					vcs.top += o.obj.outerHeight();
					vcs.top -= o._box.outerHeight(); }
				}
				/*!
				* 屏幕居中
				*/
				else {
					var top = $(window).height() - o._box.outerHeight();
						top /= 2;
						top = parseInt(top);
					var left = $(window).width() - o._box.outerWidth();
						left /= 2;
						left = parseInt(left);
					vcs = {left : left, top : $(window).scrollTop()};
					vcs.top += top; if (vcs.top < 0){
					vcs.top = 0; }
				}
				vcs['z-index'] = $.wscfg.dialog.zindex + 1;
				o._box.css(vcs); return vcs;
			},
			/*!
			* 显示弹窗
			*/
			'open' : function(){
				o.obj.addClass('open');
				/*!
				* 显示事件
				*/
				if ($.type(o.start) == 'function'){
					o.start(o);
				}
				/*!
				* 覆盖层
				*/
				if (o._boxmask.length == 1){
					if (o.nomask){
						o._boxmask.css('display', 'none');
					} else {
						var mcs = {top : 0, left : 0, display : 'block', 'z-index' : $.wscfg.dialog.zindex}; if ($.wscfg.core.msie && $.wscfg.core.msiev == 6){
							mcs.width = '100%';
							mcs.height = $(window).height();
							mcs.height = Math.max(mcs.height, $('body').outerHeight());
						} else {
							mcs.position = 'fixed';
							mcs.right = 0;
							mcs.bottom = 0;
						} o._boxmask.css(mcs);
					}
				}
				/*!
				* 新位置
				*/
				o._box.data('pos')(); o._box.attr('esc-close', o.noesc ? null : true).show($.wscfg.dialog.speed, function(){
					var _ajax = false, 
						response = '<div class="wsc-dialog-error">'+$.wscfg.dialog.lang.error+'</div>';
					o._boxbody.html('<div class="wsc-dialog-loading">&#160;</div>');
					/*!
					* 元素内联
					*/
					if (o.selector){
						var osel = $(o.selector); if (osel.length == 1){
							osel.css('display', 'block').insertBefore(o._boxbody.find('.wsc-dialog-loading'));
							o._boxbody.find('.wsc-dialog-loading').remove();
						} else {
							o._boxbody.html(response);
						} o._boxbody.imgdelay(); o._box.data('pos')();
					}
					/*!
					* 读取内容
					*/
					else {
						/*!
						* 指定
						*/
						if ($.type(o.html) == 'string'){
							o._boxbody.html(o.html).wscload().imgdelay();
							o._box.data('pos')();
						}
						/*!
						* AJAX
						*/
						else if (o.url){
							_ajax = true; $.fn.require({
								url : o.url, 
								data : 'wscdialog=1',
								dataType : 'html'
							}, function(_daj, _dhtm, _dtitle){
								o._boxbody.html(_dhtm).wscload().imgdelay(); if (_dtitle && !o.titlefixed && o._boxtitle.css('display') != 'none'){
								o._boxtitle.find('h3').text(_dtitle); }
								o._box.data('pos')(); if ($.type(o.stop) == 'function'){
									o.stop(o);
								}
							});
						}
						/*!
						* 出错
						*/
						else {
							o._boxbody.html(response).imgdelay();
						}
					}
					/*!
					* 内容完成
					*/
					if (!_ajax && $.type(o.stop) == 'function'){
						o.stop(o);
					}
					/*!
					* 拓拽
					*/
					var _drag = {handle : o._box.find('[dialog-title]')}; if (o.nodrag){
						_drag.handle.unbind();
					} else {
						o._box.draggable(_drag);
					}
					/*!
					* 点击按钮
					*/
					o._box.find('[dialog-close]').unbind('click').click(function(){
						var _btn = $(this); o._box.data('close')();
						/*!
						* 回调
						*/
						if (o.button){
							var _cfn = null; if ($.type(_btn.attr('dialog-button-yes')) != 'undefined'){
								_cfn = o.button.yescall;
							} else if ($.type(_btn.attr('dialog-button-no')) != 'undefined'){
								_cfn = o.button.nocall;
							} if ($.type(_cfn) == 'function'){
								_cfn();
							}
						}
					});
				});
			}, 
			/*!
			* 关闭弹窗
			*/			
			'close' : function(fn){
				o.obj.removeClass('open');
				/*!
				* 移除事件
				*/
				$(['open', 'close', 'pos']).each(function(k, v){o._box.removeData(v);})
				/*!
				* 关闭弹窗
				*/
				o._box.fadeOut($.wscfg.dialog.speed, function(){
					/*!
					* 隐藏覆盖层
					*/
					if (o._boxmask.length == 1){
						o._boxmask.css('display', 'none');
					}
					/*!
					* 恢复
					*/
					if (o.obj){
						var sel = o.obj.attr('dialog-selector'); if (sel){
							$(sel).css('display', 'none').insertAfter(o._box);
						}
					} o._boxbody.attr('style', null).html('&#160;');
					/*!
					* 回调
					*/
					if ($.type(fn) == 'function'){
						try{
							fn();
						}catch(err){}
					}
				});
			}
		};
		/*!
		* 注册事件
		*/
		$.each(datas, function(k, v){
			o._box.removeData(k).data(k, v);
		}); o._box.data('open')();
	};
})(jQuery);

/*! @source "js/base/form.js" */

﻿/*!
* 表单元素初始化
* @tag <input />
*      [type="button"]
*      [type="checkbox"]
*      [type="date"]
*      [type="datetime"]
*      [type="datetime-local"]
*      [type="email"]
*      [type="file"]
*      [type="hidden"]
*      [type="image"]
*      [type="month"]
*      [type="number"]
*      [type="password"]
*      [type="radio"]
*      [type="range"]
*      [type="reset"]
*      [type="submit"]
*      [type="text"]
*      [type="time"]
*      [type="url"]
*      [type="week"]
* @tag <select />
* @tag <textarea />
*/
(function($, undefined) {
	/*! 配置 */
	$.extend($.wscfg, {
		form : {
			inits : 0, 
			element : 'input,select,textarea',		// 初始化表单元素
			theme_common : 'a', 					// 元素默认样式
			theme_submit : 'b', 					// 保存按钮样式
			theme_button : 'a',						// 按钮默认样式
			/*!
			* 提交
			*/
			autocross : true, 						// 表单默认跨域
			error_count : 0, 						// 表单元素验证失败数量
			error_handle : null, 					// 表单提交第1个出错的元素对象
			error_top : 50, 						// 错误定位最小高度
			speed : 50, 							// 表单动画速度
			delaysecond : 150, 						// 回调延迟
			delayhandle : null,						// 延迟句柄
			scroll_width : 18,						// 滚动条宽度
			submit_form : null, 					// 最近一次提交的表单对象(提交后锁定, 禁止重复提交)
			submit_timer : null, 					// 最近一次提交表单定时器
			submit_second : 25000,					// 表单提交后25秒内无返回时解锁
			submit_repeat : '正在提交, 请稍候...', 	// 重复提交提醒
			submit_ignoreblur : 'blur-ignore', 		// 忽略blur事件(如: outerclick), 
			submit_target : 'wscore-iframe', 		// 表单提交iframe容器
			submit_noenterkey : false,				// 在文本框按回车激活SUBMIT事件
			/*!
			* 表单完成后重定向
			*/
			submit_redirect_text : '恭喜您\n本次操作完成, 若在 {n} 秒内没有跳转, 请点击 {x} 按钮手动跳转',
			submit_redirect_time : 3, 
			submit_redirect_btn : '继续下一步', 
			/*!
			* 消息窗
			*/
			pop_index : 3, 							// 表单内弹窗z坐标
			info_pos : 'i',							// 消息默认显示位置(Inner|Top|Left|Right|Bottom)
			/*!
			* 附件类
			*/
			file_selector_file : '上传文件', 
			file_selector_image : '上传图片', 
			file_selector_video : '上传视频', 
			file_selector_music : '上传音乐', 
			/*!
			* 语言包
			*/
			selection_joina : 0,
			selection_joint : 0, 
			selectone_null : '请选择', 
			filter_checks_max : '最多选{n}项', 
			filter_checks_min : '最少选{n}项', 
			filter_compare_invalid : '二次输入不一致', 
			filter_date_invlid : '无效的日期', 
			filter_date_max : '日期太小了', 
			filter_date_min : '日期太大了', 
			filter_empty : '清空', 
			filter_error : '出错了', 
			filter_email_invalid : '邮箱错误', 
			filter_mobile_invalid : '手机错误',
			filter_telmobile_invalid : '联系电话错误',
			filter_month_invlid : '无效月份', 
			filter_number_invalid : '请填写数字',
			filter_required_text : '必填', 
			filter_required_select : '必选', 
			filter_required_joint : '请更详细选择', 
			filter_sync_send : '请稍候...', 
			filter_text_min_less : '不少于{n}个字符', 
			filter_tel_invalid : '电话错误', 
			filter_text_max_more : '不多于{n}个字符', 
			filter_time_invalid : '无效时间', 
			filter_url_invalid : '无效的网址', 
			filter_week_invalid : '周数错误', 
			filter_character_wrap : '<span title="已输入{_input}个字, 还可以输入{_space}个字"><strong>{_space}</strong>/<em>{_allow}</em></span>', 
			filter_chinese_invalid : '限中文', 
			filter_variable_invalid : '无效输入'
		}
	});
	/*! 遍历 */
	$.fn.extend({
		wscbase_form : function(){
			var obj = $(this) || {};
			/*!
			* 无效
			*/
			if (!obj.length){
				return obj;
			}
			/*!
			* 初始元素/各元素配置
			*/
			obj.find($.wscfg.form.element).each(function(){
				$(this).wscforminit();
			});
			/*!
			* 提交
			*/
			obj.find('form').each(function(){
				var req = $(this); if (req.attr('form-ignore') == 'true'){
					return;
				} req.unbind('submit').submit(function(e){
					return req.wscbase_form_submit(e);
				});
			});
			/*!
			* 递进
			*/
			return obj;
		}, 
		/*!
		* UI
		* @method wscbase_form_ui, UI调度
		* @method wscbase_form_ui_submit, 提交按钮
		* @method wscbase_form_ui_text, UI文本
		*/
		wscbase_form_ui : function(o){
			var obj = $(this); if (o._noui){return obj;}
			/*!
			* 类型UI
			*/
			o.elem.addClass('wsc-form-elem-'+(o.type || 'null')).wrap('<div class="wsc-form '+o.theme+' inline"'+(o.type == 'hidden' ? ' style="display:none"' : '')+'><div class="wsc-form-wrap inline"></div></div>'); switch (o.type){
				case 'password' : 
				case 'textarea' : 
				case 'text' : obj.wscbase_form_ui_text(o); break;
				case 'file' : obj.wscbase_form_ui_file(o); break;
				case 'select-one' : obj.wscbase_form_ui_selectone(o); break;
				case 'radio' : 
				case 'checkbox' : obj.wscbase_form_ui_checks(o); break;
				case 'hidden' : obj.wscbase_form_ui_hidden(o); break;
			}
			/*!
			* 返回
			*/
			return obj;
		}, 
		wscbase_form_ui_checks : function(o){
			var lab = o.elem.parent().parent().next(), 
				tag = lab.get(0).nodeName.toString().toLowerCase();
			var chk = (o.elem.get(0).checked || o.elem.attr('checked')) ? true : false;
			o.elem.addClass('wsc-form-checks-input').parent().prepend('<label for="'+o.id+'" class="wsc-form-checks-icon inline '+o.type+'-'+(chk ? 'on' : 'off')+'" />'); if (tag == 'label'){
				lab.addClass('wsc-form-checks-text inline').attr('for', o.id).insertAfter(o.elem);
			}
		},
		wscbase_form_ui_file : function(o){
			$(this).wscupload_ui(o);
		},
		wscbase_form_ui_selectone : function(o){
			/*!
			* HTML格式化
			*/
			var htm  = '<label for="'+o.id+'" class="wsc-form-select inline">', sel = o.elem.wscbase_form_utli_selected();
					htm += '<div class="text inline" style="width:'+(o.elem.outerWidth()-$.wscfg.form.scroll_width)+'px">'+sel.text+'</div>';
					htm += '<div class="icon inline">';
						htm += '<div class="wsc-icon inline">';
							htm += '<div class="wsc-icon-img icon-down inline"></div>';
						htm += '</div>';
					htm += '</div>';
				htm += '</label>'; o.elem.parent().prepend(htm);
			/*!
			* 监听动作
			*/
			o.elem.data({
				open : function(){
					var wrap = o.elem.parent().parent(), 
						menu = wrap.find('.wsc-form-menu');
					/*!
					* 容器
					*/
					if (menu.length == 0){
						wrap.append('<div class="wsc-form-menu wsc-ui-static" />');
						menu = wrap.find('.wsc-form-menu');
					} else {
						menu.attr('style', null);
					}
					/*!
					* 选项
					*/
					var htm  = '<ul class="wsc-ui-static">', _options = 0; o.elem.find('option').each(function(i){var cls = false; if ($(this).attr('selected')){cls = true;} _options++; 
						htm += '<li class="wsc-ui-static"><a href="javascript:void(0)" select-index="'+i+'"'+(cls ? ' class="hover"' : '')+'>' + $(this).get(0).text + '</a></li>'; });
						htm += '</ul>'; 
						menu.html(htm);
					/*!
					* 预定义
					* @var int _swidth, 滚动条宽度
					* @var int _owidth, 元素宽度
					* @var int _oheight, 元素高度
					* @var int _width, 菜单宽度
					* @var int _height, 元素高度(可用可视区高度)
					*/
					var _swidth = $.wscfg.form.scroll_width, 
						_owidth = wrap.outerWidth(), _oheight = 25, 
						_width = _owidth * o._cols, _height = 0, _maxheight = 250, _customHeight = o.selHeight,
						_bottom = false;
					/*!
					* 极高
					*/
					var _w_up = wrap.offset().top - $(window).scrollTop(), 
						_w_down = $(window).height() - _w_up - wrap.outerHeight();
						_height = Math.max(_w_up, _w_down); _height = parseInt(_height); if (_w_down >= _w_up){_bottom = true;}
					var _sheight = _options * _oheight;
					/*!
					* 单列
					*/
					if (o._cols == 1){						
						menu.css('width', _width); if (_sheight > _height || _sheight > _maxheight){
							var _ucs = {'overflow' : 'hidden', 'overflow-y' : 'auto'};
								_ucs.height = parseInt(_height / _oheight) * _oheight;
								if(_customHeight){
									_ucs.height = _customHeight;
								}else{
									_ucs.height = Math.min(_maxheight, _ucs.height);
								}
							menu.find('ul').css(_ucs);
						}
					}
					/*!
					* 多列
					*/
					else {
						var _ucs = {width : _width};
						var _row = parseInt(_options / o._cols); if ((_options % o._cols) > 0){
							_row += 1; }
							_row *= _oheight;
						if (_row > _height || _row > _maxheight){
							_ucs = {'overflow' : 'hidden', 'overflow-y' : 'auto'};
							_ucs.width = _width + _swidth;
							_ucs.height = parseInt(_height / _oheight) * _oheight;
							_ucs.height = Math.min(_maxheight, _ucs.height);
						} else {
							_ucs.height = _row;
						} menu.find('ul').css(_ucs); menu.find('li').css({width : _owidth, 'float' : 'left'});
					}
					/*!
					* 定位
					*/
					var _pos = {left : 0}; if (_bottom){
						_pos.top = o.elem.parent().outerHeight();
					} else {
						_pos.top = menu.outerHeight() * -1;
					} if ((wrap.offset().left + menu.outerWidth()) > $(window).width()){
						_pos.left = menu.outerWidth() * -1 + wrap.outerWidth();
					}
					/*!
					* 显示
					*/
					wrap.css('z-index', $.wscfg.form.pop_index).addClass('focus');
					menu.css(_pos).slideDown($.wscfg.form.speed, function(){
						/*!
						* 图标
						*/
						o.elem.parent().find('.wsc-icon-img').addClass('icon-up').removeClass('icon-down');
						menu.find('[select-index]').unbind('click').click(function(_e){
							var _i = $(this).attr('select-index'); if ($.type(_i) != 'undefined'){
								_i = _i.toString(); if (_i.match(/^([0-9]+)$/)){
									_i = parseInt(_i); if (_i >= 0){
										o.elem.change(); o.elem.wscbase_form_utli_selecter(_i, function(_d){
											o.elem.blur().parent().find('.wsc-form-select .text').text(_d.text);
										});
									}
								} o.elem.data('close')();
							}
						}).outclick(function(){
							o.elem.data('close')();
						});
					});					
				},
				/*! 关闭 */
				close : function(){
					var wrap = o.elem.parent().parent(), 
						menu = wrap.find('.wsc-form-menu'); 
					if (menu.length == 0){
						wrap.attr('style', 'null').removeClass('focus');
						return true;
					} menu.slideUp($.wscfg.form.speed, function(){
						o.elem.parent().find('.wsc-icon-img').addClass('icon-down').removeClass('icon-up');
						wrap.attr('style', 'null').removeClass('focus');
					});
				}
			});
		},
		wscbase_form_ui_text : function(o){
			/*!
			* 清空内容支持
			*/
			o.elem.parent().prepend('<a class="wsc-ui-static wsc-form-empty" href="javascript:void(0)" title="'+$.wscfg.form.filter_empty+'" />').find('.wsc-form-empty').bind({
				mouseenter : function(){
					o.elem.attr($.wscfg.form.submit_ignoreblur, true);
				}, mouseleave : function(){
					o.elem.attr($.wscfg.form.submit_ignoreblur, null);
				}, click : function(e){
					o.elem.val('').attr($.wscfg.form.submit_ignoreblur, null).focus();
				}
			});
			/*!
			* 占位
			*/
			if (o.placeholder){
				var ept = $.fn.full2half(o.elem.val(), true, true) == '';
					o.elem.parent().prepend('<label for="'+o.id+'" class="wsc-ui-static wsc-form-placeholder"'+(ept ? '' : ' style="display:none"')+'>'+o.placeholder+'</label>');
			}
			/*!
			* 图标[结构以base/icon.js为准]
			*/
			if ((o.type == 'text' || o.type == 'password') && o.icon){
				var _text = o.elem.attr('filter-icon-text') || null, 
					_icon  = '<label for="'+o.id+'" class="wsc-form-icon inline">';
						_icon += '<div class="wsc-icon inline">';
							_icon += '<div class="wsc-icon-img icon-'+o.icon+' inline"></div>';
							_icon += _text ? '<div class="wsc-icon-txt inline">'+_text+'</div>' : '';
						_icon += '</div>';
					_icon += '</label>';
				o.elem.parent().addClass('wsc-form-wrap-icon').parent().prepend(_icon);
			}
			/*!
			* 文本域
			*/
			else if (o.type == 'textarea'){
				var _editor = o.elem.attr('editor'), 
					_editon = $.type(_editor) !== 'undefined'; 
				if (_editon){
					//o.elem.parent().addClass('wsc-form-edit').parent().addClass('wsc-form-edit');
					o.elem.wsceditor(o);
				}
			}
			/*!
			* 日历
			*/
			if (o.filter == 'date' || o.filter == 'datetime' || o.filter == 'datetime-local'){
				o.elem.data({
					/*!
					* 显示日历
					*/
					open : function(){
						var wrap = o.elem.parent().parent(), 
							menu = wrap.find('.wsc-datepicker');
						if (menu.length == 0){
							wrap.append('<div class="wsc-datepicker wsc-ui-static" style="display:none" />');
							menu = wrap.find('.wsc-datepicker');
						} wrap.css('z-index', $.wscfg.form.pop_index);
						/*!
						* 显示
						*/
						var _dater = {}, _dform = o.elem.get(0).form || null, _minfor = o.elem.attr('filter-min-for'), _maxfor = o.elem.attr('filter-max-for');
							_dater.datesel = o.elem.val();
							_dater.datemin = o.elem.attr('filter-min');
							_dater.datemax = o.elem.attr('filter-max'); if (_dform && _minfor){
							_dater.dateminfor = $(_dform).find('[name="'+_minfor+'"]').first().val(); } if (_dform && _maxfor){
							_dater.datemaxfor = $(_dform).find('[name="'+_maxfor+'"]').first().val(); }
						/*!
						* 载入完毕
						*/							
						_dater.stop = function(v){
							var dcss = {top : o.elem.parent().outerHeight(), left : 0};
								wrap.addClass('focus');
								menu.css(dcss).stop().slideDown($.wscfg.form.speed);
								menu.outclick(function(){o.elem.data('close')();});
						};
						/*!
						* 选中后关闭
						*/
						_dater.select = function(v){
							o.elem.val(v).blur().data('close')();
						};
						/*!
						* 载入
						*/
						menu.datepicker(_dater);
					}, 
					/*!
					* 关闭日历
					*/
					close : function(){
						var wrap = o.elem.parent().parent(), 
							menu = wrap.find('.wsc-datepicker'); 
						wrap.attr('style', 'null');; if (menu.length){
							menu.slideUp($.wscfg.form.speed, function(){
								wrap.removeClass('focus');
							});
						}
					}
				}).parent().prepend('<label for="'+o.id+'" class="wsc-form-datepicker inline" />');
			}
		},
		wscbase_form_ui_hidden : function(o){
			var joina = o.elem.attr('joina') || null, 
				joint = o.elem.attr('joint') || null;
			/*!
			* 用于联动
			*/
			if (joint){
				/*!
				* @var object cjoin, 配置
				*             int size, 级别
				*/
				var cjoin = {size : 1, item : 'joint-item-' + $.wscfg.form.selection_joint}; $.wscfg.form.selection_joint++;
					cjoin.wrap = o.elem.parent().parent();
				var _size = o.elem.attr('joint-size'); if (_size && _size.toString().match(/^([0-9]+)$/)){
					cjoin.size = parseInt(_size);
				}
				/*!
				* Struct
				*/
				var htm = '<div class="wsc-form-group inline">'; for (var i = 0; i < cjoin.size; i++){
					htm += '<select joint-item="'+cjoin.item+'" name="'+cjoin.item+'-'+i+'">';
					htm += '<option value="0">'+$.wscfg.form.selectone_null+'</option>';
					htm += '</select>'; } 
					htm += '</div>'; $(htm).insertBefore(cjoin.wrap);
				cjoin.wrap.parent().wscbase_form().find('label .text').css('width', 'auto');
				/*!
				* 方法
				*/
				o.elem.attr('joint-elem', cjoin.item).data({
					/*!
					* 更新Select内容
					* @param int v, 联动最大值
					*/
					update : function(v){
						v = v ? v.toString() : '';
						/*!
						* 变更
						* @var string _res, 返回实际选中文本[连接]
						* @var string _tmpstr, 临时字符
						* @var array _data, 联动配置
						* @var array _option, 选项配置
						* @var array _parent, 上级ID
						* @var array _select, 已选ID
						*/
						var _res = [], 
							_data = WSCJOINT[joint], 
							_tmpstr = '',
							_option = [],
							_parent = [],
							_select = []; 
						for (var i = 0; i < cjoin.size; i++){
							/*!
							* 选项
							*/
							_option[i] = ''; 
							/*!
							* 已选
							*/
							if (v){
								_select[i] = v.substr(0, (i+1)*2); switch (i){
									case 0 : _select[i] += '0000'; break;
									case 1 : _select[i] += '00'; break;
								}
							} else {
								_select[i] = '';
							}
							/*!
							* 上级
							*/
							_parent[i] = ''; if (i > 0 && v){
								_parent[i] = v.substr(0, i*2); switch (i){
									case 1 : _parent[i] += '0000'; break;
									case 2 : _parent[i] += '00'; break;
								}
							}
						}
						/*!
						* 数据遍历
						*/
						$(_data).each(function(dk, dv){
							var _selected = false;
								dv[0] = dv[0].toString();
							/*!
							* 一级
							*/
							if (dv[0].match(/([0-9]{2})0000$/)){
								if (dv[0] == _select[0]){
									_res[0] = dv[1];
									_selected = true;
								} _option[0] += '<option value="'+dv[0]+'"'+(_selected ? ' selected' : '')+'>'+dv[1]+'</option>';
							}
							/*!
							* 二级
							* @example 120100
							*/
							else if (cjoin.size > 1 && dv[0].match(/([0-9]{4})00$/)){
								_tmpstr = dv[0].substr(0, 2)+'0000'; if (_tmpstr == _parent[1]){
									if (dv[0] == _select[1]){
										_res[1] = dv[1];
										_selected = true;
									} _option[1] += '<option value="'+dv[0]+'"'+(_selected ? ' selected' : '')+'>'+dv[1]+'</option>';
								}
							}
							/*!
							* 三级
							*/
							else if (cjoin.size > 2){
								_tmpstr = dv[0].substr(0, 4)+'00'; if (_tmpstr == _parent[2]){
									if (dv[0] == _select[2]){
										_res[2] = dv[1];
										_selected = true;
									} _option[2] += '<option value="'+dv[0]+'"'+(_selected ? ' selected' : '')+'>'+dv[1]+'</option>';
								}
							}
						});
						/*!
						* 更新元素
						*/
						$(_option).each(function(ok, ov){
							var _selem = $('select[name="'+cjoin.item+'-'+ok+'"]');
								_selem.parent().parent().attr('style', ov == '' ? 'display:none' : null);
								_selem.html('<option value="'+(_parent[ok] || 0)+'">'+$.wscfg.form.selectone_null+'</option>'+ov).parent().find('.text').text(_res[ok] || $.wscfg.form.selectone_null);
						});
						/*!
						* 返回文本
						*/
						return _res.join('');
					},
					/*!
					* 选中Select选项
					* @param object v, 返回参数
					*               string text, 文本项
					*               string value, 选项值
					*/
					select : function(v){
						var res = o.elem.val(v.value).blur().data('update')(v.value);
							o.elem.parent().find('input[name="'+o.name+'_joint"]').val(res);
					}
				}).parent().append('<input inited="true" type="hidden" name="'+o.name+'_joint" value="" />');
				/*!
				* 载入
				*/
				var url  = $.wscfg.core.path;
					url += 'joint';
					url += '/'+joint+'.js';
				var val = o.elem.val(); $.fn.require({url : url, dataType : 'script'}, function(){
					var ori = o.elem.data('update')(val);
						o.elem.parent().find('[name="'+o.name+'_joint"]').val(ori);
				});
			}
			/*!
			* 异步载入
			*/
			else if (joina){
				var _joina_item = 'wsc-joina-'+$.wscfg.form.selection_joina, 
					_joina_wrap = o.elem.attr('name', o.name+'-temp').parent().parent(); $.wscfg.form.selection_joina++;
				$('<div joint-item="'+_joina_item+'" />').insertBefore(_joina_wrap); o.elem.attr('joina-handle', _joina_item).data({
					update : function(){
						var _joina_data = null, 
							_joina_type = o.elem.attr('joina-type') || 'post', 
							_joina_value = o.elem.val();
						if (_joina_value != ''){
							_joina_data = o.name+'='+_joina_value;
						} $.fn.require({url : joina, data : _joina_data, type : _joina_type}, function(_aj, _ad){
							$('[joint-item="'+_joina_item+'"]').html(_ad).wscload();
						});
					}
				});
				/*!
				* 执行
				*/
				try{
					o.elem.data('update')();
				}catch(err){}
			}
		},
		/*!
		* 提交每个元素需要哪些事件
		* 并对事件进行方法绑定
		* @method wscbase_form_event, Event调度
		* @method wscbase_form_event_text, Event文本
		*/
		wscbase_form_event : function(o){
			var obj = $(this), 
				evt = {}; obj.unbind();
			/*!
			* 类型
			*/
			switch (o.type){
				case 'password' : 
				case 'textarea' : 
				case 'text' : evt = obj.wscbase_form_event_text(o); break;
				case 'select-one' : evt = obj.wscbase_form_event_selectone(o); break;
				case 'button' : 
				case 'reset' : 
				case 'submit' : evt = obj.wscbase_form_event_button(o); break;
				case 'checkbox' : 
				case 'radio' : evt = obj.wscbase_form_event_checks(o); break;
				case 'file' : evt = obj.wscbase_form_event_file(o); break;
				case 'hidden' : evt = obj.wscbase_form_event_hidden(o); break;
			}
			/*!
			* 配置
			*/
			var events = {};
			/*!
			* 配置.表单元素失去焦点
			*/
			if (evt.blur){
				events.blur = function(e){
					/*!
					* 退出焦点
					*/
					obj.parent().parent().removeClass('focus');
					obj.wscbase_form_utli_placeholder();
					obj.wscbase_form_utli_character(o, e, true);
					/*!
					* 禁事件
					*/
					if (o._noevent){return;}
					/*!
					* 强制退出
					*/
					var _ignore = obj.attr($.wscfg.form.submit_ignoreblur) || null; if (_ignore){
						obj.attr($.wscfg.form.submit_ignoreblur, null);
						return;
					}
					/*!
					* 用户退出
					*/
					if (obj.attr('submit-ignore')){
						return;
					}
					/*!
					* 上传
					*/
					if (o.type == 'file'){
						obj.wscupload_blur(o, e);
						return;
					}
					/*!
					* 联动
					*/
					if (o.type == 'select-one'){
						var _joint_item = obj.attr('joint-item') || null; if (_joint_item){
							var _joint_elem = $('input[joint-elem="'+_joint_item+'"]'), 
								_joint_done = obj.wscbase_form_utli_selected();
							try{
								_joint_elem.data('select')(_joint_done);
							}catch(err){} return true;
						}
					}
					/*!
					* 清空
					*/
					if (o.type == 'text'){
						obj.wscbase_form_utli_placempty(true);
					}
					/*!
					* 系统筛选
					* 任一步错误时, 返回报告
					* #1: 系统筛选
					* #2: 用户筛选
					*/
					var filter = obj.wscformfilter(o, e); if (filter.errno == 0){
						try{
							var userfn = obj.data('wscore_blur')(o, e); if ($.isPlainObject(userfn)){
								filter = userfn;
							} else if ($.type(userfn) == 'boolean'){
								filter.errno = userfn ? 0 : 1;
							}
						}catch(err){}
					}
					/*!
					* 消息链接
					*/
					var mbox = obj; if (o.type == 'hidden'){
						var _joint = obj.attr('joint-elem'); if (_joint){
							mbox = $('select[joint-item="'+_joint+'"]').first().parent().parent().parent();
						}
					} else if (o.type == 'checkbox' || o.type == 'radio'){
						mbox = obj.parent().parent().parent();
					}
					/*!
					* 错误提醒
					*/
					if (filter.errno){
						obj.parent().parent().addClass('error');
						/*!
						* 错误记录
						*/
						$.wscfg.form.error_count++; if ($.wscfg.form.error_count == 1){
							$.wscfg.form.error_handle = obj;
						}
						/*!
						* 消息提示
						*/
						if (!o._noinfo){
							var filter_error = o.elem.attr('filter-error') || filter.error;
							mbox.wscformsgopen('error', filter_error);
						} return false;
					}
					/*!
					* AJAX同步
					*/
					if (!$.wscfg.form.submit_form && o._sync){
						var _url = $.type(o._sync) == 'string' ? o._sync : ''; if (_url == ''){
							var _form = o.elem.get(0).form; if (_form){
								_url = $(_form).attr('action');
							}
						} if (_url){
							o.elem.wscformsgopen('loading', $.wscfg.form.filter_sync_send);
							/*!
							* AJAX
							*/
							var _syncfg = {url : _url, type : 'post', data : {wscajaxsync : 1}, dataType : 'json'};
								_syncfg.data[o.name] = o.elem.val();
							$.fn.require(_syncfg, function(_syncaj, _syncdata){
								if (_syncdata.errno){
									o.elem.wscformsgopen('error', _syncdata.error);
								} else {
									if (_syncdata.text){
										o.elem.wscformsgopen('success', _syncdata.text);
									} else {
										o.elem.wscformsgclose();
									} try{
										o.elem.data('wscore_ajaxsync')(_syncdata);
									}catch(err){}
								}
							});
						} return;
					}
					/**
					* 正确提醒
					*/
					if (!o._noinfo){
						var _txt = filter.text || obj.attr('info-success');
						/*!
						* 隐藏消息
						*/
						if ($.type(_txt) == 'undefined'){
							mbox.wscformsgclose();
						}
						/*!
						* 提示消息
						*/
						else {
							mbox.wscformsgopen('success', _txt);
						}
					} obj.parent().parent().removeClass('error'); return true;
				};
			}
			/*!
			* 配置.表单元素值有变更
			* @attr [type="checkbox|file|select-one|radio"]
			*/
			if (evt.change){
				events.change = function(e){
					/*!
					* 上传
					*/
					if (o.type == 'file'){
						o.elem.wscupload_change(o, e);
						return;
					}
					/*!
					* 单/多选项
					*/
					if (o.type == 'checkbox' || o.type == 'radio'){
						var _this = o.elem.get(0), 
							_form = _this.form, 
							_name = _this.name, 
							_first = null, 
							_checked = _this.checked ? true : false;
						if (_this.name){
							/*!
							* 强退焦点
							*/
							o.elem.attr({'change_ignore' : true}).attr($.wscfg.form.submit_ignoreblur, true).blur();
							/*!
							* 状态变更
							*/
							_osels = _form ? $(_form) : $('body'); _osels.find('[type="'+o.type+'"]').each(function(){
								/*!
								* 同名
								*/
								if (this.name && this.name == _name){
									/*!
									* 同域
									*/
									var _match = false, 
										_eform = this.form; 
									if (_eform){
										_match = _form ? true : false;
									} else {
										_match = _form ? false : true;
									}
									/*!
									* 变更
									*/
									if (_match){
										var chk = false; if (_first == null){
											_first = $(this);
										}
										/*!
										* 点击项
										*/
										if ($(this).attr('change_ignore')){
											chk = _checked;
											$(this).attr('change_ignore', null);
										}
										/*!
										* 范围项
										*/
										else {
											if (o.type == 'checkbox'){
												chk = this.checked ? true : false;
											} else if (o.type == 'radio'){
												chk = _checked ? false : true;
											}
										}
										/*!
										* 变更
										*/
										if (chk){
											this.checked = true;
											$(this).attr('checked', true).parent().find('.wsc-form-checks-icon').addClass(o.type+'-on').removeClass(o.type+'-off');
										} else {
											this.checked = false;
											$(this).attr('checked', null).parent().find('.wsc-form-checks-icon').addClass(o.type+'-off').removeClass(o.type+'-on');
										}
									}
								}
							});
							/*!
							* 验证元素
							*/
							o.elem.attr({'change_ignore' : null}); if (_first){
								_first.blur();
							}
						}
					}
					/*!
					* 用户事件
					*/
					try{
						obj.data('wscore_change')(o, e);
					}catch(err){}
				};
			}
			/*!
			* 配置.表单元素获得焦点
			* @attr [type="file|password|select-one|text|textarea"]
			*/
			if (evt.focus){
				events.focus = function(e){
					/*!
					* 获焦点
					*/
					obj.parent().parent().addClass('focus').removeClass('error');
					obj.wscbase_form_utli_placeholder();
					obj.wscbase_form_utli_placempty();
					obj.wscbase_form_utli_character(o, e);
					/*!
					* 禁事件
					*/
					if (o._noevent){return;}
					/*!
					* 上传
					*/
					if (o.type == 'file'){
						o.elem.wscupload_focus(o, e);
						return;
					}
					/*!
					* 部分元素(筛选)获得焦点后
					* 立即退出焦点并激活回调方法
					*/
					if ($.inArray(o.filter, ['select-one', 'date', 'datetime', 'datetime-local']) != -1){
						/*!
						* 忽略blur筛选
						*/
						e.preventDefault();
						o.elem.attr($.wscfg.form.submit_ignoreblur, true).blur();
						/*!
						* 延迟回调
						*/
						if ($.wscfg.form.delayhandle != null){
							clearInterval($.wscfg.form.delayhandle);
							$.wscfg.form.delayhandle = null;
						} $.wscfg.form.delayhandle = setTimeout(function(){
							clearInterval($.wscfg.form.delayhandle); $.wscfg.form.delayhandle = null;
							try{o.elem.data('open')();}catch(err){}
						}, $.wscfg.form.delaysecond); return true;
					}
					/*!
					* 显示消息
					*/
					if (!o._noinfo){
						var _txt = obj.attr('info-info'); if ($.type(_txt) != 'undefined'){
							obj.wscformsgopen('info', _txt);
						} else {
							obj.wscformsgclose();
						}
					}
					/*!
					* 用户事件
					*/
					try{
						obj.data('wscore_focus')(o, e);
					}catch(err){}
				};
			}
			/*!
			* 配置.键盘某键按下后
			* @attr [type="password|text|textarea"]
			*/
			if (evt.keydown){
				events.keydown = function(e){
					/*!
					* 禁事件
					*/
					if (o._noevent){return;}
					var _code = e.which || e.keyCode || 0;
					/*!
					* 禁回车
					*/
					if (_code == 13){
						if (o.elem.attr('form-no-entrykey')){
							e.preventDefault();
							return;
						} if ($.wscfg.form.submit_noenterkey && $.inArray(o.type, ['text', 'password'])){
							e.preventDefault();
							return;
						}
					}
					/*!
					* 左右键
					*/
					else if (_code == 37 || _code == 39){
						if (o.filter == 'time') {
							var _h = 0, _i = 0, _v = obj.val().toString().replace(/ /g, ''); e.preventDefault(); if (_v != '' && _v.match(/([0-9]+)\:([0-9]+)/)){
								var _s = _v.split(':'); 
									_h = parseInt(_s[0]);
									_i = parseInt(_s[1]);									
							} if (_code == 37){
								_h -= 1;
							} else if (_code == 39){
								_h += 1;
							} if (_h < 0){
								_h = 23;
							} else if (_h > 23){
								_h = 0;
							} if (_i < 0){
								_i = 59;
							} else if (_i > 59){
								_i = 0;
							} var _r = _h < 10 ? '0' : '';
								_r += _h;
								_r += ':';
								_r += _i < 10 ? '0' : '';
								_r += _i; obj.val(_r);
						}
					}
					/*!
					* 上下键
					*/
					else if (_code == 38 || _code == 40){
						/*!
						* 数字
						*/
						if (o.filter == 'number' || o.filter == 'range'){
							var _v = obj.val().toString().replace(/ /g, ''); e.preventDefault(); if (_v != '' && _v.match(/^([\-]*)([0-9]+)$/)){
								_v = parseInt(_v); if (_code == 38){
								_v++; } else if (_code == 40){
								_v--; }
							} else {
								_v = 0;
							} obj.val(_v);
						}
						/*!
						* 数字
						*/
						if (o.filter == 'double' || o.filter == 'float'){ // 1.1 .1 11
							var _v = obj.val().toString().replace(/ /g, ''); e.preventDefault(); if (_v != '' && _v.match(/^([0-9]*)([\.]*)([0-9]+)$/)){
								_v = parseInt(_v); if (_code == 38){
								_v++; } else if (_code == 40){
								_v--; }
							} else {
								_v = 0;
							} obj.val(_v);
						}
						/*!
						* 数字
						*/
						else if (o.filter == 'time') {
							var _h = 0, _i = 0, _v = obj.val().toString().replace(/ /g, ''); e.preventDefault(); if (_v != '' && _v.match(/([0-9]+)\:([0-9]+)/)){
								var _s = _v.split(':'); 
									_h = parseInt(_s[0]);
									_i = parseInt(_s[1]);									
							} if (_code == 38){
								_i -= 1;
							} else if (_code == 40){
								_i += 1;
							} if (_h < 0){
								_h = 23;
							} else if (_h > 23){
								_h = 0;
							} if (_i < 0){
								_i = 59;
							} else if (_i > 59){
								_i = 0;
							} var _r = _h < 10 ? '0' : '';
								_r += _h;
								_r += ':';
								_r += _i < 10 ? '0' : '';
								_r += _i; obj.val(_r);
						}
					}
					/*!
					* 常规键
					*/
					else {
						// if (o._suggest){
							// if (_code >= 37 && _code <= 40){							
								// e.preventDefault();
							// }
						// }
						/*!
						* 用户事件
						*/
						try{
							obj.data('wscore_keydown')(o, e);
						}catch(err){}
					}
				};
			}
			/*!
			* 配置.键盘某键松开后
			* @attr [type="password|text|textarea"]
			*/
			if (evt.keyup){
				events.keyup = function(e){
					/*!
					* 更新占位与清空
					*/
					obj.wscbase_form_utli_placeholder();
					obj.wscbase_form_utli_placempty();
					obj.wscbase_form_utli_character(o, e);
					/*!
					* 禁事件
					*/
					if (o._noevent){return;}
					/*!
					* Ajax-Suggest
					*/
					if (o._suggest){
						obj.wscbase_form_utli_suggest(o);
					}
					/*!
					* 用户事件
					*/
					try{
						obj.data('wscore_keyup')(o, e);
					}catch(err){}
				};
			}
			/*!
			* 配置.文本区粘贴内容
			* @attr [type="password|text|textarea"]
			*/
			if (evt.paste){
				events.paste = function(e){
					setTimeout(function(){
						obj.wscbase_form_utli_placeholder();
						obj.wscbase_form_utli_placempty();
						obj.wscbase_form_utli_character(o, e);
					}, 20);
					/*!
					* 禁事件
					*/
					if (o._noevent){return;}
				};
			}
			/*!
			* 兼容模式
			*/			
			obj.parent().parent().bind({
				mouseenter : function(e){$(this).addClass('hover')}, 
				mouseleave : function(e){$(this).removeClass('hover')}
			});
			/*!
			* 注册
			*/
			$.each(events, function(k, v){
				obj.bind(k, function(e){
					v(e);
				})
			});
			/*!
			* 返回
			*/
			return obj;
		}, 
		wscbase_form_event_button : function(o){
			return {
				//mouseenter : true, mouseleave : true
			};
		},
		wscbase_form_event_checks : function(o){
			return {
				blur : true, change : true
			};
		},
		wscbase_form_event_file : function(o){
			/*!
			* 加载已上传记录
			*/
			if (o.elem.attr('filter-history') != 'false' && !o.elem.attr('filter-history-inited')){
				o.elem.attr('filter-history-inited', true).wscupload_history(o);
			}
			/*!
			* 返回可支持事件
			*/
			return {
				change : true, blur : true, focus : true
			};
		},
		wscbase_form_event_hidden : function(o){
			return {
				blur : true
			};
		},
		wscbase_form_event_selectone : function(o){
			return {
				blur : true, change : true, focus : true
			};
		},
		wscbase_form_event_text : function(o){
			return {
				blur : true, focus : true, 
				keyup : true, keydown : true, 
				paste : true
				//, mouseenter : true, mouseleave : true
			};
		}, 
		/*!
		* 提交
		* @method boolean wscbase_form_submit, 表单提交触发
		* @method boolean wscbase_form_submit_locked, 锁定表单
		* @method object wscbase_form_submit_unlock, 取消锁定
		* @method object wscbase_form_submit_position, 错误定位(元素不在可视区域内时执行)
		*/
		wscbase_form_submit : function(e){
			var obj = $(this);
			/*!
			* 重复
			*/
			if (obj.wscbase_form_submit_locked()){
				return false;
			}
			/*!
			* 初始错误
			*/
			$.wscfg.form.error_count = 0;
			$.wscfg.form.error_handle = null;
			/*!
			* 元素遍历
			*/
			var _ignore_checkbox = [], 
				_ignore_radio = [];
			obj.find($.wscfg.form.element).each(function(){
				var _name = this.name || $(this).attr('name') || null; if (_name){
					/*!
					* 类型
					*/
					var _type = this.type || $(this).attr('type') || null, 
						_blur = true;
					/*!
					* 联运菜单不执行
					*/
					if (_type == 'select-one' && $(this).attr('joint-item')){
						return true;
					}
					/*!
					* 只验证复选首元素
					*/
					if (_type == 'checkbox' ){
						if ($.inArray(_name, _ignore_checkbox) == -1){
							_ignore_checkbox.push(_name);
						} else {
							_blur = false;
						}
					}
					/*!
					* 只验证单选首元素
					*/
					if (_type == 'radio' ){
						if ($.inArray(_name, _ignore_radio) == -1){
							_ignore_radio.push(_name);
						} else {
							_blur = false;
						}
					}
					/*!
					* 元素合法性验证
					*/
					if (_blur){
						$(this).blur();
					}
				}
			});
			/*!
			* 外部事件
			*/
			if ($.wscfg.form.error_count == 0){
				try{
					var d_submit = obj.data('wscore_submit')(obj, e); if ($.type(d_submit) == 'boolean' && !d_submit){
						$.wscfg.form.error_count++;
					}
				}catch(err){}
			}
			/*!
			* 表单出错
			*/
			if ($.wscfg.form.error_count > 0){
				if ($.wscfg.form.error_handle){
					$.wscfg.form.error_handle.wscbase_form_submit_position();
					$.wscfg.form.error_handle = null;
				} obj.wscbase_form_submit_unlock(); return false;
			}
			/*!
			* 提交表单
			*/
			var tar = obj.attr('target') || null, 
				url = obj.attr('action') || window.location.href;
			/*!
			* 去除忽略项
			*/
			obj.find('[submit-ignore-wrap]').remove();
			/*!
			* 跨域提交
			*/
			var _cross = obj.find('input[name="filter_domain"]'); if (_cross.length){
				var _domain = _cross.val() || ''; if (_domain == ''){
					_domain.val($.wscfg.core.domain);
				}
			} else {
				obj.append('<input inited="true" type="hidden" name="filter_domain" value="'+$.wscfg.core.domain+'" />');
			}
			/*!
			* Ajax提交
			*/
			if (tar && tar.toString().toLowerCase() == 'ajax'){
				var a = {url : url};
					a.data = obj.serialize();
					a.type = 'post';
					a.dataType = 'json';
				$.fn.require(a, function(s, d){
					$.fn.wscform(d);
				}); return false;
			}
			/*!
			* 跨域检查
			*/
			if ($.wscfg.form.autocross){
				if (obj.attr('form-no-cross') != 'true'){
					var cro = $.fn.urlobj(url); if (cro.cross){
						obj.attr('action', cro.cross);
					}
				}
			}
			/*!
			* 默认目标
			*/
			if (!tar){
				var frm = $('#'+$.wscfg.form.submit_target); if (frm.length == 0){ $('body').append('<iframe id="'+$.wscfg.form.submit_target+'" name="'+$.wscfg.form.submit_target+'" style="width:0;height:0;overflow:hidden;display:none" />');
					frm = $('#'+$.wscfg.form.submit_target); } obj.attr('target', $.wscfg.form.submit_target);
			} return true;
		},
		wscbase_form_submit_locked : function(e){
			var obj = $(this);
			/*!
			* 状态
			*/
			if ($.wscfg.form.submit_timer){			
				//alert($.wscfg.form.submit_repeat);
				return true;
			}
			/*!
			* 锁定
			*/
			$.wscfg.form.submit_form = obj; $.wscfg.form.submit_timer = setInterval(function(){
				obj.wscbase_form_submit_unlock();
			}, $.wscfg.form.submit_second);
			/*!
			* 进度
			*/
			var _sbmt = obj.find('[type="submit"]');
			/*!
			* 禁用
			*/
			_sbmt.attr('disabled', true);
			/*!
			* 进度条
			*/
			_sbmt.each(function(){
				var pobj = $(this), 
					pcss = {};
					pcss.width = pobj.outerWidth();
					pcss.height = pobj.outerHeight();
				pobj.parent().parent().append('<div class="wsc-form-submit-progress" style="width:'+pcss.width+'px;height:'+pcss.height+'px;" />')
			});
			/*!
			* 返回
			*/
			return false;
		},
		wscbase_form_submit_unlock : function(i){
			/*!
			* 解锁(长时间无返回)
			*/
			var i = i && i.match(/^([0-9]+)$/) ? parseInt(i) : 3;
				clearInterval($.wscfg.form.submit_timer); $.wscfg.form.submit_timer = null;
			var obj = $.wscfg.form.submit_form; setTimeout(function(){
				$.wscfg.form.submit_form = null;
				/*!
				* 完成
				*/
				obj.find('[type="submit"]').attr('disabled', null).each(function(){
					$(this).parent().parent().find('.wsc-form-submit-progress').remove();
				});
			}, i * 150);
			/*!
			* 返回
			*/
			return obj;
		},
		wscbase_form_submit_position : function(){
			var obj = $(this); if (obj.length == 1){
				var _div = obj.parent().parent();
				var _top = _div.offset().top; _top = parseInt(_top);
				var _bottom = _div.outerHeight(); _bottom = parseInt(_bottom);
				var _min = $(window).scrollTop(); _min = parseInt(_min); 
				var _max = $(window).height(); _max = parseInt(_max); _max += _min;
				if (_top < _min || _bottom > _max){
					/*!
					* 不在可视区域内
					*/
					var top  = _div.offset().top; 
						top -= $.wscfg.form.error_top; if (top < $.wscfg.form.error_top){
						top = $.wscfg.form.error_top; }
						$('html,body').stop().animate({scrollTop : top}, $.wscfg.form.speed);
				}
				/*!
				* 可视区域内
				*/
			} return obj;
		},
		/*!
		* 工具
		* @method int wscbase_form_utli_character, 当前表单输入字符长度
		* @method plainobject wscbase_form_utli_selected, 已选中项内容与值
		* @method boolean wscbase_form_utli_selecter, 设置表单第n项为选中值
		* @method wscbase_form_utli_placeholder, 文本表单占位符
		*/
		wscbase_form_utli_character : function(o, e, c){
			/*!
			* 不支持
			*/
			var obj = $(this), 
				res = true; 
			if (!isNaN(o._max) && o._max > 0){
				if ($.inArray(o.filter, ['password', 'text', 'textarea']) != -1){
					res = false;
				}
			} if (res){
				return true;
			}
			/*!
			* 容器
			*/
			var obe = obj.parent().find('.wsc-form-character');
			/*!
			* 关闭
			*/
			if (c){
				if (obe.length){
					obe.hide();
				} return true;
			}
			/*!
			* 载入
			*/
			if (obe.length == 0){
				obj.parent().prepend('<div class="wsc-form-character wsc-ui-static" />');
				obe = obj.parent().find('.wsc-form-character');
			}
			/*!
			* 计算
			*/
			var val = obj.val(), len = 0, chr = $.wscfg.core.charset == 'utf-8' ? 3 : 2, chs = '', 
				cfg = {_count : o._max, _input : 0, _space : 0};
				cfg._allow = parseInt(cfg._count/chr);
			$(val.split('')).each(function(_k, _v){
				var z = _v.match(/^([\u4e00-\u9fa5]+)$/) ? chr : 1;
					len += z; 
				if (len <= cfg._count){
					chs += _v;
					cfg._input += z;
				}
			}); if (cfg._input > 0){
				cfg._input = parseInt(cfg._input/chr);
				cfg._input = cfg._input > 0 ? cfg._input : 1;
			} cfg._space = cfg._allow - cfg._input; obj.val(chs);
			/*!
			* 统计值
			*/
			var htm = $.wscfg.form.filter_character_wrap;
				htm = htm.replace(/\{_input\}/ig, cfg._input).replace(/\{_allow\}/ig, cfg._allow).replace(/\{_space\}/ig, cfg._space);
				obe.html(htm).show();			
		},
		wscbase_form_utli_selected : function(){
			var obj = $(this), r = {text : $.wscfg.form.selectone_null, value : '0'}; obj.find('option').each(function(i){
				var qry = false; if (i == 0){
					qry = true;
				} else {
					if ($(this).get(0).selected || $(this).attr('selected')){
						qry = true;
					}
				} if (qry){
					r.text = $(this).get(0).text;
					r.value = $(this).get(0).value;
				}
			}); return r;
		},
		wscbase_form_utli_selecter : function(n, fn){
			/*!
			* 接受参数
			* @param int n, Select中的第n个option
			* @param function fn, 选项变更后执行回调
			*/
			var obj = $(this), 
				obs = null; 
			obj.find('option').each(function(i){
				if (i > 0 && i == n){
					$(this).attr('selected', true); this.selected = true;
				} else {
					$(this).attr('selected', null); this.selected = false;
				}
			}); var r = obj.wscbase_form_utli_selected(); try{
				fn(r);
			}catch(err){}
		},
		wscbase_form_utli_placempty : function(f){return true;
			var obj = $(this), 
				obx = obj.parent().find('.wsc-form-empty'); if (obx.length == 0){return;}
			var cls = false, 
				val = obj.val(); val = $.fn.full2half(val, true, true);
			if (f || val == ''){
				cls = true;
			} if (cls){
				obx.css('display', 'none');
			} else {
				obx.css('display', 'block');
			}
		},
		wscbase_form_utli_placeholder : function(f){
			var obj = $(this), 
				obe = obj.parent().find('.wsc-form-placeholder'); if (obe.length == 0){return;}
			var val = obj.val(),
				ept = $.fn.full2half(val, true, true) === '';
			if (ept){
				obe.css('display', 'block');
			} else {
				obe.css('display', 'none');
			}
		}, 
		wscbase_form_utli_suggest : function(o){
			var obj = $(this), 
				obw = obj.parent().parent(), 
				obe = obw.find('.wsc-form-suggest'),
				htm = '';
			/*!
			* 首次载入
			*/
			if (obe.length == 0){
				obw.append('<div class="wsc-form-suggest wsc-ui-static" style="display:none" />');
				obe = obw.find('.wsc-form-suggest');
				/*!
				* 监听元素
				*/
				obe.data({
					open : function(x){
						/*!
						* 外点击
						*/
						if (!obe.attr('suggest-outclick')){
							obe.attr('suggest-outclick', true).outclick(function(){
								try{obe.data('close')()}catch(err){}
							});
						} obw.css('z-index', $.wscfg.form.pop_index);
						/*!
						* 显示元素
						*/
						obe.html(x).css({width : obw.outerWidth(), top : obe.parent().outerHeight(), left : 0, display : 'block'}).find('[suggest-index]').unbind('click').click(function(e){
							obj.attr($.wscfg.form.submit_ignoreblur, null);
							/*!
							* 回调
							*/
							if (o._suggest_callback){
								/*!
								* 已预设
								*/
								if ($.inArray(o._suggest_callback, ['index', 'text', 'value']) != -1){
									var _value = $(this).attr('suggest-'+o._suggest_callback) || '';
										obj.val(_value).blur();
								}
								/**
								* 自定义
								*/
								else if (o._suggest_callback){
									try{
										obj.data(o._suggest_callback)(obj, $(this));
									}catch(err){}
								}
							}
							/*!
							* 外点击
							*/
							obe.data('close')();
						});
					}, close : function(){
						obw.attr('style', 'null');
						obe.attr('suggest-outclick', null).css('display', 'none');
					}
				}).bind({
					mouseenter : function(){
						obj.attr($.wscfg.form.submit_ignoreblur, true);
					}, mouseleave : function(){
						obj.attr($.wscfg.form.submit_ignoreblur, null);
					}
				});
			}
			/*!
			* 当前值
			*/
			var val = obj.val(), 
				ept = val.toString().replace(/ /g, '');
			if (ept == ''){
				try{
					obe.data('close')();
				}catch(err){}
			} else {
				/*!
				* 等待
				*/
				if (obe.attr('suggest-loading')){
					return;
				}
				/*!
				* 上次
				*/
				var _last = obe.attr('suggest-last') || null; if (ept == _last){
					return;
				}
				/*!
				* 请求
				*/
				var a = {url : o._suggest}, 
					v = $.fn.urlencode(val);
					a.data = o.name+'='+v;
				obe.attr({'suggest-loading' : true, 'suggest-last' : ept}).require(a, function(_o, _d){
					obe.attr('suggest-loading', null); try{
						if (_d.match(/suggest\-index/i)){
							obe.data('open')(_d);
						} else {
							obe.data('close')();
						}
					}catch(err){}
				});
			}
		}
	});
	/*! 返回 */
	$.fn.wscform = function(o, s){
		var obj = $.wscfg.form.submit_form || null;
		/*!
		* 最近表单
		*/
		if (obj){
			obj.wscbase_form_submit_unlock();
			/*!
			* 绑定到form元素上的submited事件
			*/
			try{
				var _usr = obj.data('wscore_submited')(obj, o); if ($.type(_usr) == 'boolean' && _usr){
					return;
				}
			}catch(err){}
			/*!
			* 系统默认返回事件处理
			* JSON[可能的字段, 非必须]
			* @var object r = {
			*     errno : int, // 错误编号
			*     error : string, // 错误原因
			*     field : string, // 字段名
			*     redirect : string, // 重定向URL
			*     callback : string|object // 回调方法
			* }
			*/
			var r = {errno : 1, error : '', field : '', redirect : ''};
			/*!
			* JSON返回
			* @param object o = {}
			*/
			if ($.isPlainObject(o)){
				r = o;
			}
			/*!
			* 布尔[true|false]
			*/
			else if ($.type(o) == 'boolean'){
				r.errno = o ? 0 : 1;
			}
			/*!
			* 字段[报错隶属字段]
			*/
			else if (o.match(/^([_a-z][a-z0-9_]*)$/i)) {
				r.field = o; if (s){
				r.error = s; }
			}
			/*!
			* 回调
			*/
			if (o.callback){
				try{
					obj[ o.callback ](obj,r);
					return;
				}catch(err){}
			}
			/*!
			* 错误
			*/
			if (r.errno){
				if (r.field){
					var _first = obj.find('[name="'+r.field+'"]').first(); if (_first.length == 1){
						_first.wscbase_form_submit_position().wscformsgopen('error', r.error);
						return;
					}
				} alert(r.error); return;
			}
			/*!
			* UE项
			*/
			var _goto = function(){obj.redirect(o.redirect ? o.redirect : null)}, 
				_pbox = obj.attr('form-no-remind') || obj.attr('ue-ignore');
			/*!
			* 提醒
			*/
			if ($.type(_pbox) == 'undefined'){
				var text = $.wscfg.form.submit_redirect_text.replace(/\{n\}/ig, $.wscfg.form.submit_redirect_time).replace(/\{x\}/ig, $.wscfg.form.submit_redirect_btn); $.fn.wscalert({
					text : text, yestext : $.wscfg.form.submit_redirect_btn, type : 'success', call : function(){
						_goto();
					}
				}); setTimeout(function(){
					_goto();
				}, $.wscfg.form.submit_redirect_time * 1000); return;
			}
			/*!
			* 跳转
			*/
			_goto();
		}
	};
	/*! 全局 */
	$.fn.wscforminit = function(){
		var obj = $(this); if (obj.attr('inited')){return obj;}
		/*!
		* 配置
		* @var object o = {
		*     elem : object, // 当前元素jQuery-Select Object
		*     filter : string, // 元素筛选类型
		*     icon : string, // 当前元素图标
		*     id : string, // 当前元素UniqueID
		*     name : string, // 当前元素名称
		*     placeholder : string, // 占位符内容
		*     required : boolean, // 是否要求必须
		*     theme : string, // 样式
		*     type : string, // 当前元素类型
		*     _max : int, // 最大长度(值)
		*     _min : int, // 最小长度(值)
		*     _cols : int, //菜单列数
		*     _noevent : boolean, // 禁用Event
		*     _noinfo : boolean, // 禁用提示信息
		*     _noui : boolean, // 禁用UI
		* }
		*/
		var o = {elem : obj, _sync : false, _syncurl : '', _cols : 1, _noui : false, _noevent : false, _noinfo : false, _min : false, _max : false, _suggest : false, _suggest_callback : null}, a = {inited : true};
			o.id = o.elem.attr('id') || 'wscore-form-init-' + $.wscfg.form.inits; $.wscfg.form.inits++; a.id = o.id;
			o.name = o.elem.attr('name') || this.get(0).name || null;
			o.type = o.elem.attr('type') || this.get(0).type || null;
			o.icon = o.elem.attr('filter-icon') || null;
			o.filter = o.elem.attr('filter') || o.type; if (o.filter == 'datetime' || o.filter == 'datetime-local'){o.filter == 'date';}
			o.required = o.elem.attr('required') || false;
			o.placeholder = '';
			o.selHeight = o.elem.attr('selHeight') || null;
			/*!
			* 菜单列数
			*/
			if (o.type == 'select-one'){
				var _cols = o.elem.attr('filter-cols') || ''; if (_cols && _cols.toString().match(/^([0-9]+)$/)){
					_cols = parseInt(_cols); if (_cols > 1){
						o._cols = _cols;
					}
				}
			}
			/*!
			* 推荐
			*/
			var _suggest = o.elem.attr('filter-suggest'); if (_suggest){
				o._suggest = _suggest;
				o._suggest_callback = o.elem.attr('filter-suggest-callback') || 'text';
			}
			/*!
			* 按类型设置样式
			*/
			o.theme = o.elem.attr('theme') || null; if (o.theme == null){
				switch (o.type){
					case 'submit' : o.theme = $.wscfg.form.theme_submit; break;
					case 'reset' : 
					case 'button' : o.theme = $.wscfg.form.theme_button; break;
					default 	: o.theme = $.wscfg.form.theme_common; break;
				}
			}
			/*!
			* UI & Event
			*/
			var _ui = o.elem.attr('form-no-ui') || null, 
				_event = o.elem.attr('form-no-event') || null, 
				_info = o.elem.attr('info-ignore') || null; 
			if (_ui && _ui.toString().toLowerCase() == 'true'){
				o._noui = true;
			} if (_event && _event.toString().toLowerCase() == 'true'){
				o._noevent = true;
			} if (_info && _info.toString().toLowerCase() == 'true'){
				o._noinfo = true;
			}
			/*!
			* 必填与筛选
			*/
			var _min = o.elem.attr('filter-min') || null, 
				_max = o.elem.attr('filter-max') || null;
			if (_min){
				o._min = _min.toString(); if (o._min.match(/^([\-]*)([0-9]+)$/)){
					o._min = parseInt(o._min);
				}
			} if (_max){
				o._max = _max.toString(); if (o._max.match(/^([\-]*)([0-9]+)$/)){
					o._max = parseInt(o._max);
				}
			} if (o.required){
				a.required = null;
			}
			/*!
			* HTML5转兼容视图
			*/
			var _html5_tags = ['date', 'datetime', 'datetime-local', 'email', 'month', 'number', 'range', 'search', 'time', 'url', 'week']; if ($.inArray(o.type, _html5_tags) != -1){
				a.type = 'text'; o.type = a.type;
			}
			/*!
			* 日历默认尺寸
			*/
			if (o.filter == 'date'){
				var _datesize = o.elem.attr('size') || null; if (!_datesize){
					a.size = 14;
				}
			}
			/*!
			* 上传
			* @var object _files, 上传控制
			*             string filter-ajax, Ajax-Action
			*             string filter-action, Ajax-Action
			*             string filter-type, 支持格式
			*             string filter-icon, 支持格式
			*             string filter-lang, 支持格式
			*             int filter-min, 最小
			*             int filter-max, 最多
			* @var boolean _file_ajax, 异步Ajax上传
			* @var boolean _file_action, 上传路径
			*/
			if (o.type == 'file'){
				o._files = {'filter-formid' : 0}; if (o.elem.get(0).form){
					var _formid = $(o.elem.get(0).form).find('input[name="formsubmit"]').val(); if (_formid){
						o._files['filter-formid'] = _formid;
					}
				}
				/*!
				* 模式
				*/
				var _action = o.elem.attr('filter-ajax'); if ($.type(_action) !== 'undefined'){
					if (_action){
						_action = _action.toString().toLowerCase(); if (_action == 'true' || _action == 'false'){
							_action = '';
						}
					} if (!_action){
						var _target = o.elem.get(0); if (_target && _target.form && _target.form.action){
							_action = _target.form.action;
						}
					} o._files['filter-ajax'] = true; o._files['filter-action'] = _action;
				}
				/*!
				* 类型
				*/
				var _typed = o.elem.attr('filter-type'); if (_typed){
					o._files['filter-type'] = _typed;
				}
				/*!
				* 数量
				*/
				if (!isNaN(o._min) && o._min > 0){
					o._files['filter-min'] = o._min; 
				} if (!isNaN(o._max) && o._max > 0){
					o._files['filter-max'] = o._max;
				}
				/*!
				* 语言
				*/
				var _icon = o.elem.attr('filter-icon'), 
					_lang = $.wscfg.form.file_selector_image; 
				switch (_icon){
					case 'file'  : _lang = $.wscfg.form.file_selector_file; break;
					case 'video' : _lang = $.wscfg.form.file_selector_video; break;
					case 'music' : _lang = $.wscfg.form.file_selector_music; break;
					default      : _lang = $.wscfg.form.file_selector_image; _icon = 'image'; break;
				} o._files['filter-lang'] = _lang; o._files['filter-icon'] = _icon;
			}
			/*!
			* 文本
			*/
			else if ($.inArray(o.type, ['password', 'text', 'textarea']) != -1){
				a.autocomplete = 'off';
				/*! 占位 */
				var _placeholder = o.elem.attr('placeholder') || null; if (_placeholder){/*  && !o._noui */
					o.placeholder = _placeholder;
					a.placeholder = null;
				}
				/*! 图标 */
				var _icon = o.elem.attr('filter-icon') || null; if (_icon){
					o.icon = _icon;
				}
				/*! AJAX-SYNC */
				var _sync = o.elem.attr('filter-sync'); if ($.type(_sync) != 'undefined'){
					o._sync = _sync ? _sync : true;
				}
			}
			/*!
			* 分项初始化
			*/
			try{
				o.elem.attr(a);
			}catch(err){}
			o.elem.wscbase_form_ui(o).wscbase_form_event(o);
			return obj;
	};
	/*! 筛选 */
	$.fn.wscformfilter = function(o, e){
		/*!
		* 接受参数
		* @param object o, 由wscforminit方法初始化
		* @param object e, 当前Event事件
		* @return object r, 返回结果
		*                int errno, 错误代码
		*                string error, 错误原因
		*/
		var obj = $(this), r = {errno : 0, error : ''};
		/*!
		* 文本类
		*/
		if ($.inArray(o.type, ['password', 'text', 'textarea']) != -1){
			var v = obj.val(), 
				vblank = $.fn.full2half(v, true, true);
			/*!
			* 未填写
			*/
			if (vblank == ''){
				if (o.required){
					r.errno = 1;
					r.error = $.wscfg.form.filter_required_text;
				} return r;
			}			
			/*! [D]
			* 日历[date|datetime|datetime-local]
			* @note 需最大、小范围计算
			*/
			if (o.filter == 'date'){
				var q = $.fn.isdate(vblank); if (q.i > 0){
					obj.val(q.s);
				} else {
					r.errno = 1;
					r.error = $.wscfg.form.filter_date_invlid;
				} return r;
			}
			/*! [E]
			* 邮箱
			* @note 转换全小写
			*/
			else if (o.filter == 'email'){
				var q = $.fn.isemail(vblank); if (q){
					obj.val(q);
				} else {
					r.errno = 1;
					r.error = $.wscfg.form.filter_email_invalid;
				} return r;
			}
			/*! [M]
			* 手机
			*/
			else if (o.filter == 'mobile'){
				var q = $.fn.ismobile(vblank); if (q){
					obj.val(q);
				} else {
					r.errno = 1;
					r.error = $.wscfg.form.filter_mobile_invalid;
				} return r;
			}
			/*! [M]
			* 手机或电话
			*/
			else if (o.filter == 'telmobile'){
				var q = $.fn.istel(vblank); if (q){
					obj.val(q);
				} else {
					var q = $.fn.ismobile(vblank);
					if (q){
						obj.val(q);
					} else {
						r.errno = 1;
						r.error = $.wscfg.form.filter_telmobile_invalid;
					}
				} return r;
				
			}
			/*! [M]
			* 月份
			*/
			else if (o.filter == 'month'){
				var q = $.fn.isdate(vblank+'-01'); if (q.i > 0){
					obj.val(q.s);
				} else {
					r.errno = 1;
					r.error = $.wscfg.form.filter_month_invlid;
				} return r;
			}
			/*! [N]
			* 数字
			*/
			else if (o.filter == 'number' || o.filter == 'range'){
				v = vblank; if (v.toString().match(/^([\-]*)([0-9]+)$/)){
					v = parseInt(v); if ($.type(o._min) == 'number' && v < o._min){
						v = o._min;
					} if ($.type(o._max) == 'number' && v > o._max){
						v = o._max;
					} obj.val(v);
				} else {
					r.errno = 1;
					r.error = $.wscfg.form.filter_number_invalid;
				} return r;
			}
			/*! [N]
			* 数字   /^([0-9]*)([\.]*)([0-9]+)$/
			*/
			else if (o.filter == 'float' || o.filter == 'double'){
				v = vblank; if (v.toString().match(/^([0-9]*)([\.]*)([0-9]*)$/)){
					v = parseFloat(v); if ($.type(o._min) == 'number' && v < o._min){
						v = o._min;
					} if ($.type(o._max) == 'number' && v > o._max){
						v = o._max;
					} obj.val(v);
				} else {
					r.errno = 1;
					r.error = $.wscfg.form.filter_number_invalid;
				} return r;
			}
			/*! [T]
			* 固话
			*/
			else if (o.filter == 'tel'){
				var q = $.fn.istel(vblank); if (q){
					obj.val(q);
				} else {
					r.errno = 1;
					r.error = $.wscfg.form.filter_tel_invalid;
				} return r;
			}
			/*! [T]
			* 时间
			*/
			else if (o.filter == 'time'){
				var q = $.fn.istime(vblank); if (q){
					obj.val(q);
				} else {
					r.errno = 1;
					r.error = $.wscfg.form.filter_time_invalid;
				} return r;
			}
			/*!
			* URL
			*/
			else if (o.filter == 'url'){
				/*!
				* 预设
				*/
				v = $.fn.isurl(vblank); if (v == ''){
					r.errno = 1;
					r.error = $.wscfg.form.filter_url_invalid;
				} else {
					obj.val(v);
				} return r;
			}
			/*! [W]
			* 周数
			*/
			else if (o.filter == 'week'){
				var q = $.fn.isweek(vblank); if (q){
					obj.val(q);
				} else {
					r.errno = 1;
					r.error = $.wscfg.form.filter_week_invalid;
				} return r;
			}
			/*! [Z]
			* 其它
			*/
			else {
				var l = $.fn.strlen(v);
				/*!
				* 太短
				*/
				if ($.type(o._min) == 'number' && o._min > 0){
					if (l < o._min){
						r.errno = 1;
						r.error = $.wscfg.form.filter_text_min_less.replace(/\{n\}/g, o._min);
						return r;
					}
				}
				/*!
				* 太长
				*/
				if ($.type(o._max) == 'number' && o._max > 0){
					if (l > o._max){
						r.errno = 1;
						r.error = $.wscfg.form.filter_text_max_more.replace(/\{n\}/g, o._max);
						return r;
					}
				}
				/*!
				* 二字段比较
				*/
				if (o.type == 'password'){
					var cpa = o.elem.attr('filter-compare'); if (cpa){
						var cpf = o.elem.get(0).form; if (cpf){
							var cpe = $(cpf).find('[name="'+cpa+'"]'); if (cpe){
								var cpv = cpe.val(); if (cpv != v){
									r.errno = 1;
									r.error = $.wscfg.form.filter_compare_invalid;
									return r;
								}
							}
						}
					}
				}
				/*!
				* 字符类型
				*/
				var _ftype = o.elem.attr('filter-type') || ''; 
				/*!
				* 变量
				*/
				if (_ftype == 'variable'){
					if (!v.match(/^([_0-9][_a-z0-9]*)$/)){
						r.errno = 1;
						r.error = $.wscfg.form.filter_variable_invalid;
						return r;
					}
				}
				/*!
				* 限中文
				*/
				else if (_ftype == 'chinese'){
					if (!$.fn.ischinese(v)){
						r.errno = 1;
						r.error = $.wscfg.form.filter_chinese_invalid;
						return r;
					}
				}
			}
		}
		/*!
		* 菜单[必选]
		*/
		else if (o.type == 'select-one' && o.required){
			var q = obj.wscbase_form_utli_selected();
				q.value = q.value.toString();
			if (q.value == '' || q.value == '0'){
				r.errno = 1;
				r.error = $.wscfg.form.filter_required_select;
			} return r;
		}
		/*!
		* 单多选
		*/
		else if (o.type == 'checkbox' || o.type == 'radio'){
			var _cks = 0, 
				_form = o.elem.get(0).form || null;
			if (_form){
				/*!
				* 选中数
				*/
				var _omatch = /([\[\]]+)/g, 
					_oname = o.name.replace(_omatch, '');
				$(_form).find('[type="'+o.type+'"]').each(function(){
					var _name = this.name || $(this).attr('name') || null; if (_name){
						_name = _name.replace(_omatch, ''); if (_name == _oname){
							_cks += this.checked ? 1 : 0;
						}
					}
				});
				/*!
				* 必须字段
				*/
				if (o.required && _cks == 0){
					r.errno = 1;
					r.error = $.wscfg.form.filter_required_select;
					return r;
				}
				/*!
				* 选太少
				*/
				if (o._min && o._min > 0 && _cks < o._min){
					r.errno = 1;
					r.error = $.wscfg.form.filter_checks_min.replace(/\{n\}/g, o._min);
					return r;
				}
				/*!
				* 选太多
				*/
				if (o._max && o._max > 0 && _cks > o._max){
					r.errno = 1;
					r.error = $.wscfg.form.filter_checks_max.replace(/\{n\}/g, o._max);
					return r;
				}
			}
		}
		/*!
		* 隐藏域
		*/
		else if (o.type == 'hidden'){
			var v = obj.val() || '';
			/*!
			* 联动
			*/
			if (obj.attr('joint-elem')){
				var _err = false, 
					_req = o.required ? 1 : 0, 
					_reqs = obj.attr('joint-required');
				if (_reqs && _reqs.toString().match(/^([0-9]+)$/)){
					_reqs = parseInt(_reqs); if (_reqs > 0){
						_req = _reqs;
					}
				}
				/*!
				* 未填
				*/
				if (v == '' || v == '0' || v == 0){
					_err = _req > 0 ? true : false;
				}
				/*!
				* 已选
				*/
				else {
					v = v.toString(); switch (_req){
						case 2 : _err = v.match(/0000$/) ? true : false; break;
						case 3 : _err = v.match(/00$/) ? true : false; break;
					}					
				}
				/*!
				* 出错
				*/
				if (_err){
					r.errno = 1;
					r.error = $.wscfg.form.filter_required_joint;
					return r;
				}
			}
		}
		/*!
		* 上传附件
		*/
		else if (o.filter == 'file'){
		}
		/*!
		* 返回
		*/
		return r;
	};
	/*!
	* 显示表单消息
	*/
	$.fn.wscformsgopen = function(t, x){
		/*!
		* 变更
		* @var object obj, 当前元素对象
		* @var string obn, 当前元素名称
		* @var object obw, 消息容器对象
		* @var object obe, 消息内容对象
		*/
		var obj = $(this), 
			obn = obj.get(0).nodeName.toLowerCase();
		/*!
		* 表单
		*/
		if ($.inArray(obn, ['input', 'select', 'textarea']) != -1){
			var obw = obj.parent().parent();
		}
		/*!
		* 普通
		*/
		else {
			var obw = obj;
		}
		/*!
		* 位置
		*/
		var _pos = obw.attr('info-pos'), 
			_set = $.wscfg.form.info_pos;
		if (_pos){
			_pos = _pos.toString().toLowerCase(); switch (_pos){
				case 't' : case 'top' : _set = 't'; break;
				case 'l' : case 'left' : _set = 'l'; break;
				case 'r' : case 'right' : _set = 'r'; break;
				case 'b' : case 'bottom' : _set = 'b'; break;
				case 'i' : case 'inner' : _set = 'i'; break;
			}
		}
		/*!
		* 消息元素
		*/
		var obe = obw.find('.wsc-form-info'), htm = ''; if (obe.length == 0){
			var eid  = obj.attr('id'); if (_set == 'i'){
				htm += '<br />';}
				htm += '<label';
				htm += eid ? ' for="'+eid+'"' : '';
				htm += ' class="wsc-form-info inline wsc-ui-static"';
				htm += ' style="display:none"';
				htm += ' />'; obw.append(htm); obe = obw.find('.wsc-form-info');
		}
		/*!
		* 显示
		* @param string t, 类型(info|error|success|progress)
		* @param string x, 内容
		*/
		var t = t || 'info', 
			x = x || null;
		var z = '<div class="wsc-form-info-wrap '+t+'">';
			z += '<div class="wsc-form-info-icon">';
			z += '</div>';
			z += '<div class="wsc-form-info-text">'; if (x){x = x.toString().replace(/\n/, "<br />");
			z += x; }else{
			z += '&#160;'; }
			z += '</div>';
			z += '</div>'; obe.html(z);
		/*!
		* 行内
		*/
		if (_set == 'i'){
			obe.css({margin : '5px 0'}).show();
		}
		/*!
		* 定位
		*/
		else {
			var ocs = {top : 0, left : 0};
			/*!
			* 上方[Top]
			*/
			if (_set == 't'){
				ocs.top -= obe.outerHeight();
			}
			/*!
			* 下方[Bottom]
			*/
			else if (_set == 'b'){
				ocs.top += obw.outerHeight();
			} 
			/*!
			* 左侧[Right]
			*/
			else if (_set == 'l'){
				ocs.left -= obe.outerWidth();
			} 
			/*!
			* 右侧[Right]
			*/
			else if (_set == 'r'){
				ocs.left += obw.parent().parent().outerWidth();
			}
			/*!
			* Margin
			*/
			var _margin = {
				Top : obw.attr('info-margin-top') || null, 
				Left : obw.attr('info-margin-left') || null, 
				Right : obw.attr('info-margin-right') || null, 
				Bottom : obw.attr('info-margin-bottom') || null 
			}; $.each(_margin, function(_k, _v){
				if (_v && _v.match(/^([\-]*)([0-9]+)$/)){
					_k = 'margin'+_k;
					ocs[_k] = parseInt(_v);
				}
			});
			/*!
			* 显示
			*/
			obe.addClass('wsc-form-info-position');
			obe.css(ocs).show();
		}
	};
	/*!
	* 关闭表单消息
	*/
	$.fn.wscformsgclose = function(){
		/*!
		* 变更
		* @var object obj, 当前元素对象
		* @var string obn, 当前元素名称
		* @var object obw, 消息容器对象
		* @var object obe, 消息内容对象
		*/
		var obj = $(this), 
			obn = obj.get(0).nodeName.toLowerCase();
		/*!
		* 表单
		*/
		if ($.inArray(obn, ['input', 'select', 'textarea']) != -1){
			var obw = obj.parent().parent();
		}
		/*!
		* 普通
		*/
		else {
			var obw = obj;
		}
		/*!
		* 消息元素
		*/
		var obe = obw.find('.wsc-form-info'); if (obe.length){
			obe.hide();
		}
	};
})(jQuery);

/*! @source "js/base/icon.js" */

/*!
* <a icon icon-name="search" icon-pos="r" icon-no-text="true" href="#">Text</a>
* <div class="wsc-icon a">
*	<div class="wsc-icon-wrap">
*		<div class="wsc-icon icon-search"></div>
*		<div class="wsc-icon-text">text</div>
*	</div>
* </div>
*/
(function($,undefined){
	/*! 配置 */
	$.extend($.wscfg, {
		icon : {
			inits : 0, 
			pos : 'l',				// 默认位置
			theme : 'a',			// 默认样式
			element : '[icon]'		// 初始化元素
		}
	});
	/*!
	* 自动识别图标
	*/
	$.fn.extend({
		wscbase_icon: function(){
			var obj = $(this) || {}; if (!obj.length) { return; }
			/*!
			* 图标遍历 
			*/ 
			obj.find($.wscfg.icon.element).each(function(){
				if (!$(this).attr('icon-inited')){
					$.wscfg.icon.inits++; 
					$(this).attr({'icon-inited' : true});
					/*!
					* Flash去除
					*/
					if (obj.get(0).nodeName.toLowerCase() != 'embed'){
						$(this).wscicon_ui().wscicon_event();
					}
				}
			});
			/*!
			* 递归返回
			*/
			return obj;
		}
	});	
	/*!
	* 图标UI
	* @attr boolean icon-no-ui
	* @attr boolean icon-no-text
	* @attr boolean icon-inline
	* @attr string icon-theme
	* @attr string icon-color
	* @attr string icon-pos
	*/
	$.fn.wscicon_ui = function(){
		var obj = $(this);
		/*!
		* 禁用UI时
		*/
		if (obj.attr('icon-no-ui') == 'true'){
			return obj;
		}
		/*!
		* 样式
		*/
		var _block = obj.attr('icon-inline') == 'false', 
			_color = obj.attr('icon-color') || '', 
			_icon = obj.attr('icon') || 'undefined', 
			_notext = obj.attr('icon-no-text') == 'true', 
			_pos = obj.attr('icon-pos') || $.wscfg.icon.pos, 
			_theme = obj.attr('icon-theme') || $.wscfg.icon.theme;
		/*!
		* 无内容
		*/
		if (_notext){
			_notext_title = obj.text() || ''; if ($.type(_notext_title) == 'string' && _notext_title != ''){
			_notext_title = _notext_title.replace(/([\r\n]*)/g, ''); }
			obj.html('&#160;'); _pos = 'n';
		}
		/*!
		* 结构
		*/
		obj.addClass(_block ? 'wsc-icon-block' : 'inline').wrap('<div class="wsc-icon '+_theme+' '+(_block ? 'wsc-icon-block' : 'inline')+'"'+(_notext ? ' title="'+_notext_title+'"' : '')+' />').
		wrap('<div class="wsc-icon-wrap wsc-icon-pos-'+_pos+' '+_color+'" />').
		wrap('<div class="wsc-icon-txt" />').parent().parent().prepend('<div class="wsc-icon-img icon-'+_icon+'" />');
		/*!
		* 递归返回
		*/
		return obj;
	};
	/*!
	* 图标事件
	*/
	$.fn.wscicon_event = function(){
		var obj = $(this);
		return obj;
	};
})(jQuery);

/*! @source "js/base/imgview.js" */

(function($,undefined){
	/*!
	* 自动识别图标
	*/
	$.fn.extend({
		wscbase_imgview: function(){
			$(this).find('[_img], [imgview], [wscimage]').each(function(){
				if (!$(this).attr('imgview-inited')){
					$(this).attr('imgview-inited', true).unbind('click').click(function(e){
						var node = $(this).get(0).nodeName.toLowerCase(), 
							href = ''; e.preventDefault(); 
						switch (node){
							case 'a' : href = $(this).attr('href'); break;
							case 'img' : href = $(this).attr('src'); break;
						} if (href){
							href = $.fn.imgsize(href, 0, 0); if (href){
								window.open(href);
							}
						}
					});
				}
			});
		}
	});	
})(jQuery);

/*! @source "js/base/menu.js" */

/*!
* 菜单MENU
* @example 
* <div menu>
*     <div>#1</div>
*     <div>#2</div>
*     <div>#3</div>
*     <div>#4</div>
* </div>
*/
(function($,undefined){
	$.extend($.wscfg, {
		menu : {
			speed : 150, 				// 折叠速度
			theme : 'a' 				// 默认样式
		}
	});	
	/*!
	* 初始化
	*/
	$.fn.wscbase_menu = function(){
		var obj = $(this);
		/*!
		* 选择器错误
		*/
		if (obj.length){
			/*!
			* 遍历
			*/
			obj.find('[menu]').each(function(){
				if ($(this).menu_ui()){
					$(this).menu_event();
				}
			});
		}
		/*!
		* 返回
		*/
		return obj;
	};
	/*!
	* 操作
	*/
	$.fn.extend({
		menu_ui : function(){
			var obj = $(this); if (obj.attr('menu-no-ui') != 'true'){
				var li = 0, 
					tm = obj.attr('menu') || $.wscfg.menu.theme, 
					il = obj.attr('menu-inline') == 'false' ? '' : ' inline'; 				
				obj.addClass('wsc-menu'+il+' '+tm).find('> *').each(function(){
					var it = $(this); li++; if (li == 1){
						var ic = ''; if (obj.attr('menu-icon') != 'true'){
							ic = 'wsc-menu-icon';
						} it.wrap('<div class="wsc-menu-head wsc-ui-static'+il+' '+ic+'" />'); if (ic){
							it.parent().append('<div class="wsc-menu-arrow inline" />');
						}
					} else {
						it.wrap('<div class="wsc-menu-item" />');
					}
				});				
				obj.wrapInner('<div class="wsc-menu-inner wsc-ui-static" />').wrapInner('<div class="wsc-menu-list wsc-ui-static" />').find('.wsc-menu-head').insertBefore(obj.find('.wsc-menu-list'));
				if(li<=1){
					obj.find(".wsc-menu-list").remove();
					return;
					
				}				
			} return obj.attr('menu', null);
		}, 
		menu_event : function(){
			var obj = $(this), 
				evt = {};
			/*!
			* 方法
			*/
			if (obj.attr('menu-no-event') != 'true'){
				obj.data({
					open : function(){
						var head = obj.find('.wsc-menu-head'), 
							list = obj.find('.wsc-menu-list'), 
							mcss = {top : head.outerHeight()-2};
						var whead = head.outerWidth(), 
							wlist = list.outerWidth();
						/*!
						* 左右布局
						*/
						if (whead >= wlist){
							/*!
							* 内容区较小
							*/
							mcss.left = 0;
							mcss.width = whead;
							list.addClass('inner');
						} else {
							/*!
							* 内容越界
							*/
							var mbox = Math.max($('body').width(), $(window).width()), 
								curx = head.offset().left + list.outerWidth();
							if (curx > mbox){
								mcss.right = 0;
							} else {
								mcss.left = 0;
							}
						}
						/*!
						* 上下布局
						*/
						var _rmcls = 'wsc-menu-postp', 
							_adcls = 'wsc-menu-posbt';
						var _limit = Math.max($('body').height(), $(window).height()), //$(window).height(), 
							_sptop = head.offset().top - $(window).scrollTop(), 
							_spbtm = _limit - _sptop - head.outerHeight();
						if (_sptop > _spbtm && _spbtm < list.outerHeight()){
							_limit = list.outerHeight(); if (_limit < _sptop){
								mcss.top = _limit * -1;
								_rmcls = 'wsc-menu-posbt', 
								_adcls = 'wsc-menu-postp';
							}
						}
						/*!
						* 显示
						*/
						obj.addClass(_adcls).removeClass(_rmcls);
						list.css(mcss).slideDown($.wscfg.menu.speed);
					}, 
					close : function(){
						obj.find('.wsc-menu-list').slideUp($.wscfg.menu.speed);
					}
				});
			}
			/*!
			* 事件
			*/
			obj.unbind().hover(
				function(){
					obj.addClass('hover'); try{
					obj.data('open')(); }catch(err){}
				}, function(){
					obj.removeClass('hover'); try{
					obj.data('close')();}catch(err){}
				}
			);
			/*!
			* 返回
			*/
			return obj;
		}
	});
})(jQuery);

/*! @source "js/base/profile.js" */

/*!
*	名片信息加载 事件绑定 鼠标悬浮事件
*	2014.4.15  timwu
*/
(function($, undefined) {
	/*! 配置 */
	$.extend($.wscfg, {
		profile : {
			inits : 0, 
			speed : 75,
			zindex : 2000, 
			lang : {
				close : '关闭', 
				error : '载入数据错误'
			}
		}
	});	
	/*! 遍历 */
	$.fn.extend({
		wscbase_profile : function(){
			var obj = $(this) || {};
			/**
			* 无效
			*/
			if (!obj.length){
				return obj;
			}
			/**
			* 初始元素/各元素配置
			* @var cfg = {
			* }
			*/
			obj.find('[profile]').each(function(){
				if (!$(this).attr('profile-inited')){
					var src = 'wscore-profile-' + $.wscfg.profile.inits; $.wscfg.profile.inits++; $(this).attr({'profile-inited' : true, 'profile-src' : src}).unbind('hover').hover(function(){
						$(this).profileopen();
						return false;
					},function(){
						return false;
					});
				}
			});
			/**
			* 递进
			*/
			return obj;
		}
	});	
	/*!
	*	profile open : mouseenter
	*/
	$.fn.profileopen = function(){
		var o = { // 包含DOM对象,默认配置,计算方法
			src: $(this) || null,
			box: $('[profile-origin="'+$(this).attr('profile-src')+'"]'),
			dataurl: $(this).attr('profile-data') || null, // require
			pos: 'auto',
			width: 'auto', // 333 机构
			theme: 'a',
			height: 'auto', // 121 机构
			delayClose: null,
			posUpdate: function(){ // 检查合法显示方位
				var outer = o.src.parent('.wsc-profile-outer'),
					browser_height = $(window).height(),
					browser_width = $(window).width(),
					src_height = outer.outerHeight(true),
					src_width = outer.outerWidth(true),
					to_top = outer.offset().top - $(document).scrollTop(),
					to_left = outer.offset().left - $(document).scrollLeft(),
					to_bottom = (browser_height + $(document).scrollTop()) - (src_height + outer.offset().top),
					to_right = (browser_width + $(document).scrollLeft()) - (src_width + outer.offset().left);
				o.resetPos(o.box);
				if (pos == 'auto') {
					if (to_top >= o.box.outerHeight(true)){
						o.renderTop(outer);
						return;
					}
					if (to_bottom >= o.box.outerHeight(true)) {
						o.renderBottom(outer);
						return;
					}					
					if (to_right >= o.box.outerWidth(true)) {
						o.renderRight(outer);
						return;
					}
					if (to_left >= o.box.outerWidth(true)) {
						o.renderLeft(outer);
						return;
					}
					return;
				}
				if (pos == 'top') {
					o.renderTop(outer);
					return;
				}
				if (pos == 'right') {
					o.renderRight(outer);
					return;
				}
				if (pos == 'bottom') {
					o.renderBottom(outer);
					return;
				}
				if (pos == 'left') {
					o.renderLeft(outer);
					return;
				}
			},
			renderTop: function(outer){
				var posTop = outer.offset().top - o.box.outerHeight(true);
				var posLeft = outer.offset().left - 20;
				o.box.css('top',posTop + 'px').find('.wsc-profile-box').css('top','-10px');
				o.box.find('.wsc-profile-box')
				.removeClass('profile-box-left profile-box-right profile-box-bottom profile-box-top')
				.addClass('profile-box-top');
				o.box.css('left',posLeft + 'px');
				return;					
			},
			renderRight: function(outer){
				var posTop = outer.offset().top - 20;
				var posLeft = outer.offset().left + outer.outerWidth(true);
				o.box.css('left',posLeft + 'px').find('.wsc-profile-box').css('right','-10px');
				o.box.find('.wsc-profile-box')
				.removeClass('profile-box-left profile-box-right profile-box-bottom profile-box-top')
				.addClass('profile-box-right');
				o.box.css('top',posTop + 'px');
				return;					
			},
			renderBottom: function(outer){
				var posTop = outer.offset().top + outer.outerHeight(true);
				var posLeft = outer.offset().left - 20;
				o.box.css('top',posTop).find('.wsc-profile-box').css('bottom','-10px');
				o.box.find('.wsc-profile-box')
				.removeClass('profile-box-left profile-box-right profile-box-bottom profile-box-top')
				.addClass('profile-box-bottom');
				o.box.css('left', posLeft + 'px');
				return;					
			},
			renderLeft: function(outer){
				var posTop = outer.offset().top - 20;
				var posLeft = outer.offset().left - o.box.outerWidth(true); 
				o.box.css('top',posTop).find('.wsc-profile-box').css('left','-10px');
				o.box.find('.wsc-profile-box')
				.removeClass('profile-box-left profile-box-right profile-box-bottom profile-box-top')
				.addClass('profile-box-left');
				o.box.css('left',posLeft+'px');
				return;					
			},
			resetPos: function(_obj){
				_obj.css({
					'top' : '0',
					'left' : '0',
					'bottom' : '',
					'right' : ''
				}).children('.wsc-profile-box').css({
					'top' : '',
					'left' : '',
					'right' : '',
					'bottom' : ''
				});
			},
			cleanUp: function(){
				/*!
				*	同一时间只显示一个名片
				*/
				$('.wsc-profile-wrapper').hide();
				clearTimeout(o.delayClose);
				o.delayClose = null;
			}
		};
		/*!
		*	检查
		*/
		if (o.src == null || 
			o.dataurl == null) {
			return;
		}
		/*!
		*	读取用户配置
		*/
		var pos = o.src.attr('profile-pos') || o.pos,
			width = o.src.attr('profile-width') || o.width,
			height = o.src.attr('profile-height') || o.height,
			theme = o.src.attr('profile') || o.theme;
		/*!
		*	数据重置
		*/
		if (height != 'auto') { height += 'px'; }
		if (width != 'auto') { width += 'px'; }
		/*!
		*	first time
		*/
		if (o.box.length == 0) {
			/*!
			*	公共变量
			*/
			var src_width = o.src.outerWidth(true);
			/*!
			*	HTML格式化
			*/
			o.src.wrapAll('<div class="'+theme+' wsc-profile-outer wsc-ui-static" style="width:'+src_width+'px;"></div>');
			var profilebox = '<div style="width:'+width+';" class="wsc-profile-wrapper wsc-ui-static" profile-origin="'+ o.src.attr('profile-src') +'">';
			profilebox += '		<div style="height:'+height+';" class="wsc-profile-box wsc-ui-static">';
			profilebox += ' 		<div class="wsc-profile-inner">';
			profilebox += ' 		</div>';
			profilebox += '			<div class="wsc-profile-arrow">';
			profilebox += '			</div>';
			profilebox += '		</div>';
			profilebox += '</div>';
			/* o.src.parent('.wsc-profile-outer').append(profilebox); */
			$('body').append(profilebox);
			o.box = $('[profile-origin="'+ o.src.attr('profile-src') +'"]') || null; 
			if (o.box == null) {return;}
			/*!
			*	样式初始化
			*/
			var _float = o.src.css('float');
			var _display = o.src.css('display');
			if (_display == 'inline') {
				_display = 'inline-block';
			}
			o.src.css({
				'display' : _display
			});
			var maxH = o.src.outerHeight(true);
			var maxW = o.src.outerWidth(true);
			o.src.find('*').each(function(_i,_d){
				var h = $(_d).outerHeight(true);
				var w = $(_d).outerWidth(true);
				if (h >= maxH) {
					maxH = h;
				}
				if (w >= maxW) {
					maxW = w;
				}
			});
			o.src.parent('.wsc-profile-outer').css({
				'display' : _display,
				'float' : _float,
				'height' : maxH + 'px',
				'width' : maxW + 'px'
			});
			/*!
			*	事件
			*/
			o.box.data({
				/*!
				*	打开名片
				*/
				open: function(){
					if (o.box.find('.wsc-profile-inner').hasClass('loaded')) {
						o.cleanUp();
						o.posUpdate();
						o.box.show();
					} else {
						o.cleanUp();
						o.box.fadeIn($.wscfg.profile.speed, function(){
							$.fn.require({url:o.dataurl},function(_ajax_conf, _ajax_data, _ajax_title){
								o.box.find('.wsc-profile-inner').addClass('loaded').html(_ajax_data);
								o.posUpdate();
								/*!
								*	绑定关注事件
								*/
							    o.box.find('[ajax-follow]').data('ajax-stop', function(obj, setting, d){
							        if(d.errno == 0){
							            if(o.box.find('.follow-button').html() == '<span class="pink">&nbsp;+</span>&nbsp;加关注'){
							                o.box.find('.follow-button').html('<span class="pink">&nbsp;-</span>&nbsp;取消关注').width(78);
							            }else{
							                o.box.find('.follow-button').html('<span class="pink">&nbsp;+</span>&nbsp;加关注').width(65);
							            }
							        }else{
							            $.fn.wscalert('操作失败');
							        }
							    })
								o.box.find('.wsc-profile-inner').wscload().imgdelay();
							});
						});						
					}
				},
				/*!
				*	关闭名片
				*/
				close: function(){
					o.box.hide();
				}
			});
			/*!
			*	解除原事件 绑定事件到上层
			*/
			o.src.unbind('mouseleave').unbind('mouseenter');
			o.src.parent('.wsc-profile-outer').hover(function(e){
				o.box.data('open')();
			},function(e){
				clearTimeout(o.delayClose);
				o.delayClose = null;
				o.delayClose = setTimeout(function(){
					o.box.data('close')();
				},1000);
			});			
			o.box.hover(function(e){
				clearTimeout(o.delayClose);
				o.delayClose = null;
				o.box.data('open')();
			},function(){
				o.box.data('close')();
			});
		} 
		o.box.data('open')();
	};
})(jQuery);

/*! @source "js/base/slider.js" */

(function ($, undefined) {
    /*! 配置 */
    $.extend($.wscfg, {
        slider: {
            inits: 0,					// 当前页Slider总数
            element: "[slider]",		// Slider属性选择器
            theme: 'a',				// Slider默认样式
            width: 0, 					// 默认宽度
            height: 0, 				// 默认高度
            item: 1,					// 每次切换数量
            second: 8,					// 自动切换默认时长(秒)
            speed: 350,				// 自动速度
            effect: 'basic',			// 默认动画效果
            event: 'click',			//
            vertical: false,			// 默认是否为上下切换
            nav: true, 				// 项目导航
            thumb: false, 				// 以缩图显示导航
            arrow: false,				// 显示切换剪头
            clone: false				// 设置克隆
        }
    });
    /*! 遍历 */
    $.fn.extend({
        wscbase_slider: function () {
            var obj = $(this);
            if (!obj.length) {
                return;
            }
            obj.find($.wscfg.slider.element).each(function () {
                if (!$(this).attr("slider-inited")) {
                    $(this).attr({'slider-inited': true}).wscslider();
                }
            });
            return obj;
        }
    });
    /*! 注册 */
    $.fn.wscslider = function (o) {
        var obj = $(this),
            o = obj.wscslider_setting(o);
        o.items = 0;
        /*!
         * 结构
         */
        obj.addClass('wsc-slider ' + o.theme).find('> *').each(function () {
            $(this).css('display', 'block').wrap('<div slider-item="' + o.items + '" class="wsc-slider-item wsc-ui-static" />');
            o.items++;
            if (o.items == 1) {
                if (o.width == 0) {
                    o.width = $(this).outerWidth();
                }
                if (o.height == 0) {
                    o.height = $(this).outerHeight();
                }
            }
        });
        obj.wrapInner('<div slider-wrap slider-current="-1" class="wsc-slider-wrap wsc-ui-static" />');
        /*!
         * 尺寸
         */
        obj.wscslider_resize(o);
        if (o.items < 2) {
            return obj;
        } else {
            obj.wscslider_utility(o);
        }
        /*!
         * 工具栏
         */
        obj.wscslider_datas(o);
        return obj;
    };
    /*!
     * 工具包
     */
    $.fn.extend({
        wscslider_datas: function (o) {
            var obj = $(this), wrap = obj.find('[slider-wrap]'), datas = {
                /*!
                 * 到指定SLIDE
                 */
                'slide': function (n) {
                    /*!
                     * 清除定时
                     */
                    wrap.data('clear')();
                    /*!
                     * 当前记录
                     */
                    var x = o.items - 1,
                        d = 1,
                        c = wrap.attr('slider-current') || 0;
                    c *= 1;
                    if (n > x) {
                        n = 0;
                    } else if (n < 0) {
                        n = x;
                    }
                    d += n;
                    wrap.attr('slider-current', n);
                    /*!
                     * 继续下一个
                     */
                    wrap.data('timer')(d);
                    /*!
                     * NAV状态
                     */
                    if (o.nav) {
                        obj.find('[slider-goto]').removeClass('hover');
                        obj.find('[slider-goto="' + n + '"]').addClass('hover');
                    }
                    /*!
                     * 切换效果
                     */
                    if (n == c) {
                        return true;
                    }
                    obj.wscslider_effect(o, n, c);
                },
                /*!
                 * 定时器
                 */
                'handle': null, 'timer': function (n) {
                    wrap.data('handle', setInterval(function () {
                        wrap.data('slide')(n);
                    }, o.second * 1000));
                }, 'clear': function () {
                    var handle = wrap.data('handle');
                    if (handle) {
                        clearInterval(wrap.data('handle'));
                        wrap.data('handle', null);
                    }
                }
            };
            /*!
             * 注册方法
             */
            $.each(datas, function (k, v) {
                wrap.removeData(k).data(k, v);
            });
            /*!
             * 载首记录
             */
            try {
                wrap.data('slide')(0);
            } catch (err) {
            }
            /*!
             * 鼠标事件
             */
            obj.unbind().bind({
                'mouseenter': function () {
                    obj.addClass('mouse');
                    try {
                        wrap.data('clear')();
                    } catch (err) {
                    }
                }, 'mouseleave': function () {
                    var n = wrap.attr('slider-current') || 0;
                    n *= 1;
                    obj.removeClass('mouse');
                    try {
                        wrap.data('slide')(n);
                    } catch (err) {
                    }
                }
            });
        },
        wscslider_resize: function (o) {
            var obj = $(this),
                wrap = obj.find('[slider-wrap]');
            /*!
             * 尺寸
             */
            var szw = {'width': o.width, 'height': o.height};
            if (!o.clone) {
                szw['overflow'] = 'hidden';
            }
            obj.css(szw);
            wrap.css(szw);
        },
        wscslider_utility: function (o) {
            /*!
             * 按钮与箭头
             */
            var obj = $(this), wrap = obj.find('[slider-wrap]'), htm = '';
            /*!
             * 克隆
             */
            if (o.clone) {
                var _cf = wrap.find('[slider-item]').first().clone(),
                    _cl = wrap.find('[slider-item]').last().clone();
                wrap.append(_cf.attr('slider-item', o.items));
                wrap.prepend(_cl.attr('slider-item', "-1"));
            }
            /*!
             * 箭头
             */
            if (o.arrow) {
                htm += '<a slider-goto="p" class="wsc-slider-arrow wsc-slider-arrow-' + (o.vertical ? 't' : 'l') + '" href="javascript:void(0)"></a>';
                htm += '<a slider-goto="n" class="wsc-slider-arrow wsc-slider-arrow-' + (o.vertical ? 'b' : 'r') + '" href="javascript:void(0)"></a>';
            }
            /*!
             * 导航
             */
            if (o.nav && o.items > 1) {
                htm += '<div class="wsc-slider-navs">';
                for (var i = 0; i < o.items; i++) {
                    htm += '<a slider-goto="' + i + '" class="wsc-slider-nav inline' + (i == 0 ? ' hover' : '') + '" href="javascript:void(0)"><em>' + (i + 1) + '</em></a>';
                }
                htm += '</div>';
            }
            /*!
             * 工具
             */
            if (htm != '') {
                wrap.append(htm).find('[slider-goto]').unbind(o.event).bind(o.event, function (e) {
                    var g = $(this).attr('slider-goto'),
                        n = 0;
                    if ($.type(g) == 'string' || $.type(g) == 'number') {
                        if (g.match(/^([0-9]+)$/)) {
                            n = g * 1;
                        } else {
                            var _last = wrap.attr('slider-current') || '0';
                            _last = _last * 1;
                            if (g == 'n') {
                                n = _last + 1;
                            } else if (g == 'p') {
                                n = _last - 1;
                            }
                        }
                    }
                    try {
                        wrap.data('slide')(n);
                    } catch (err) {
                    }
                });
            }
        },
        wscslider_setting: function (o) {
            var obj = $(this), o = {};
            /*!
             * 切换方向
             * @attr boolean slider-vertical, 默认false
             */
            if ($.type(o.vertical) != 'boolean') {
                o.vertical = obj.attr('slider-vertical') == 'true' || obj.attr('slider-direction') == 'v' ? true : false;
            }
            /*!
             * 克隆
             */
            if ($.type(o.clone) != 'boolean') {
                o.clone = obj.attr('slider-clone') == 'true' ? true : false;
            }
            /*!
             * 切换时长
             * @attr int slider-second
             */
            if ($.type(o.second) == 'undefined') {
                o.second = obj.attr('slider-second');
            }
            if (($.type(o.second) == 'string' || $.type(o.second) == 'number') && o.second.toString().match(/^([0-9]+)$/)) {
                o.second = o.second * 1;
            } else {
                o.second = $.wscfg.slider.second;
            }
            o.second = o.second > 1 ? o.second : 1;
            /*!
             * 每次切换数量
             */
            if ($.type(o.item) == 'undefined') {
                o.item = obj.attr('slider-item');
            }
            if (($.type(o.item) == 'string' || $.type(o.item) == 'number') && o.item.toString().match(/^([0-9]+)$/)) {
                o.item = o.item * 1;
            } else {
                o.item = $.wscfg.slider.item;
            }
            o.item = o.item > 1 ? o.item : 1;
            /*!
             * 尺寸
             */
            if ($.type(o.width) == 'undefined') {
                o.width = obj.attr('slider-width');
            }
            if (($.type(o.width) == 'string' || $.type(o.width) == 'number') && o.width.toString().match(/^([0-9]+)$/)) {
                o.width = o.width * 1;
            } else {
                o.width = $.wscfg.slider.width;
            }
            if ($.type(o.height) == 'undefined') {
                o.height = obj.attr('slider-height');
            }
            if (($.type(o.height) == 'string' || $.type(o.height) == 'number') && o.height.toString().match(/^([0-9]+)$/)) {
                o.height = o.height * 1;
            } else {
                o.height = $.wscfg.slider.height;
            }
            /*!
             * 用户按钮与按钮显示方式
             */
            if ($.type(o.nav) != 'boolean') {
                o.nav = obj.attr('slider-nav') != 'false';
            }
            if (o.nav) {
                if ($.type(o.thumb) != 'boolean') {
                    o.thumb = obj.attr('slider-thumb') == 'true';
                }
            } else {
                o.thumb = false;
            }
            /*!
             * 切换箭头
             */
            if ($.type(o.arrow) != 'boolean') {
                var _arrow = obj.attr('slider-arrow');
                if ($.type(_arrow) == 'string' && _arrow != '') {
                    _arrow = _arrow.toLowerCase();
                }
                if (_arrow == 'true') {
                    o.arrow = true;
                } else if (_arrow == 'false') {
                    o.arrow = false;
                } else {
                    o.arrow = $.wscfg.slider.arrow;
                }
            }
            /*!
             * 皮肤
             */
            if ($.type(o.theme) == 'undefined') {
                o.theme = obj.attr('slider-theme');
            }
            o.theme = o.theme || $.wscfg.slider.theme;
            /*!
             * 事件
             */
            if ($.type(o.event) != 'string' || o.event == '') {
                o.event = obj.attr('slider-event') || $.wscfg.slider.event;
            }
            /*!
             * 动画效果
             */
            if ($.type(o.effect) != 'string' || o.effect == '') {
                o.effect = obj.attr('slider-effect') || $.wscfg.slider.effect;
            }
            /*!
             * 返回配置
             */
            return o;
        }
    });
    /*!
     * 效果调度
     * @param object o, 配置/由wscslider_setting返回
     * @param int n, 待显示Next[效果执行后]
     * @param int c, 正显示Current[效果执行前]
     */
    $.fn.extend({
        wscslider_effect: function (o, n, c) {
            switch (o.effect) {
                case 'fade' :
                    $(this).wscslider_effect_wscfade(o, n, c);
                    break;
                case 'plain' :
                    $(this).wscslider_effect_wscplain(o, n, c);
                    break;
                case 'slice' :
                    $(this).wscslider_effect_wscslice(o, n, c);
                    break;
                default :
                    $(this).wscslider_effect_basic(o, n, c);
                    break;
            }
        }
    });
    /*!
     * 标准效果
     */
    $.fn.wscslider_effect_basic = function (o, n, c) {
        var obj = $(this), wrap = obj.find('[slider-wrap]');
        /*!
         * Animate
         */
        var _begine = 0, _finish = o.items;
        if (o.clone) {
            _begine = -1, _finish = o.items + 1;
        }
        /*!
         * 元素块
         */
        for (var i = _begine; i < _finish; i++) {
            var ncs = {}, fps = i - n;
            /*!
             * 垂直
             */
            if (o.vertical) {
                ncs['left'] = 0;
                ncs['top'] = fps * o.height;
            }
            /*!
             * 水平
             */
            else {
                ncs['top'] = 0;
                ncs['left'] = fps * o.width;
            }
            /*!
             * 动画
             */
            wrap.find('[slider-item="' + i + '"]').stop().animate(ncs, $.wscfg.slider.speed, function(){
				$(this).imgdelay();
			});
        }
    };
    /*!
     * 单块切换
     */
    $.fn.wscslider_effect_wscslice = function (o, n, c) {
        var obj = $(this), wrap = obj.find('[slider-wrap]');
        /*!
         * 效果处理
         */
        wrap.find('[slider-item]').each(function () {
            var z = $(this).attr('slider-item');
            z *= 1,
                s = {position: 'absolute'};
            if (z == c) {
                s['top'] = 0;
                s['left'] = 0;
                s['z-index'] = 1;
            } else {
                var sl = 1;
                /*!
                 * 垂直
                 */
                if (o.vertical) {
                    s['left'] = 0;
                }
                /*!
                 * 水平
                 */
                else {
                    s['top'] = 0;
                }
                /*!
                 * is-Prev-Detect
                 */
                if (c == 0 && n == (o.items - 1)) {
                    sl *= -1;
                } else if (n < c) {
                    sl = -1;
                    if (n == 0 && c == (o.items - 1)) {
                        sl = 1;
                    }
                }
                /*!
                 * 垂直
                 */
                if (o.vertical) {
                    s['top'] = o.height * sl;
                }
                /*!
                 * 水平
                 */
                else {
                    s['left'] = o.width * sl;
                }
                /*!
                 * Z区
                 */
                s['z-index'] = -1;
                if (z == n) {
                    s['z-index'] = 2;
                }
            }
            $(this).stop().css(s);
        });
        /*!
         * 切换
         */
        wrap.find('[slider-item="' + n + '"]').stop().animate({top: 0, left: 0}, $.wscfg.slider.speed, function () {
            $(this).imgdelay();
        });
    };
    /*!
     * 淡入淡出
     */
    $.fn.wscslider_effect_wscfade = function (o, n, c) {
        var obj = $(this), wrap = obj.find('[slider-wrap]');
        /*!
         * 效果处理
         */
        wrap.find('[slider-item]').each(function () {
            var z = $(this).attr('slider-item');
            z *= 1,
                s = {'top': 0, 'left': 0};
            if (z == c) {
                s['z-index'] = 1;
                s['display'] = 'block';
            } else {
                s['display'] = 'none';
                s['z-index'] = z == n ? 2 : -1;
            }
            $(this).css(s);
        });
        /*!
         * 切换
         */
        wrap.find('[slider-item="' + c + '"]').fadeOut($.wscfg.slider.speed);
        wrap.find('[slider-item="' + n + '"]').fadeIn($.wscfg.slider.speed, function () {
            $(this).imgdelay();
        });
    };
    /*!
     * 文本项
     */
    $.fn.wscslider_effect_wscplain = function (o, n, c) {
        var goi = 0,
            gos = [],
            obj = $(this),
            wrap = obj.find('[slider-wrap]');
        var _begine = 0, _finish = o.items, _poffset = _noffset = 0;
        var toMoveTop = 0, toMoveLeft = 0, last_index = -1, to_move = 0;
        if (o.clone) {
            _begine = -1;
        }
        //计算溢出的最后一个元素
        if(o.vertical){
            var h = 0;
            for(var j = _finish - 1; j > 0; j--){
                h += wrap.find('[slider-item="' + j + '"]').height();
                if(h > wrap.height()){
                    last_index = j + 1;
                    to_move = h - wrap.height();
                    break;
                }
            }
        }else{
            var w = 0;
            for(var j = _finish - 1; j > 0; j--){
                w += wrap.find('[slider-item="' + j + '"]').width();
                if(w > wrap.width()){
                    last_index = j + 1;
                    to_move = w - wrap.width();
                    break;
                }
            }
        }
        if(n > last_index){
            return;
        }
        /*!
         * 当前
         */
        var _nitem = wrap.find('[slider-item="' + n + '"]'), _ntemp = {
            obj: _nitem, ocs: {
                top: 0, left: 0
            }
        };
        gos[goi] = _ntemp;
        goi++;
        _noffset = o.vertical ? _nitem.height() : _nitem.width();

        if(last_index == n){
            if(o.vertical){
                _ntemp = {
                    obj: _nitem, ocs: {
                        top: _nitem.position().top - to_move, left: 0
                    }
                };
            }else{
                _ntemp = {
                    obj: _nitem, ocs: {
                        top: 0, left: _nitem.position().left - to_move
                    }
                };
            }
            gos[goi] = _ntemp;
            goi++;
            _noffset = o.vertical ? _ntemp.ocs.top + _nitem.height() : _ntemp.ocs.left + _nitem.width();
        }
        /*!
         * 前置
         */
        for (var i = n - 1; i >= _begine; i--) {
            var elem = wrap.find('[slider-item="' + i + '"]'), temp = {
                obj: elem, ocs: {top: 0, left: 0}
            };
            toMoveLeft = elem.width();
            toMoveTop = elem.height();
            if(n == last_index){
                toMoveLeft = to_move;
                toMoveTop = to_move;
            }
            if (o.vertical) {
                _poffset -= toMoveTop;
                temp.ocs.top = _poffset;
            } else {
                _poffset -= toMoveLeft;
                temp.ocs.left = _poffset;
            }
            gos[goi] = temp;
            goi++;
        }
        /*!
         * 后置
         */
        for (var i = n + 1; i < _finish; i++) {
            var elem = wrap.find('[slider-item="' + i + '"]'), temp = {
                obj: elem, ocs: {top: 0, left: 0}
            };
            toMoveLeft = elem.width();
            toMoveTop = elem.height();
            if(n == last_index + 1){
                toMoveLeft = to_move;
                toMoveTop = to_move;
            }
            if (o.vertical) {
                temp.ocs.top = _noffset;
                _noffset += toMoveTop;
            } else {
                temp.ocs.left = _noffset;
                _noffset += toMoveLeft;
            }
            gos[goi] = temp;
            goi++;
        }
        /*!
         * 动画
         */
        $(gos).each(function (k, v) {
            v.obj.stop().animate(v.ocs, $.wscfg.slider.speed, function(){
				$(this).imgdelay();
			});
        });

    };
})(jQuery);

/*! @source "js/base/tips.js" */

(function($, undefined) {
	/*! 配置 */
	$.extend($.wscfg, {
		tips : {
			attrs : 'tips', 	// 含此属性的元素以Tips显示
			surfix : 'tips',
			inits : 0, 
			speed : 350
		}
	});
	/*! 遍历 */
	$.fn.extend({
		wscbase_tips : function(){
			var obj = $(this) || {};
			/**
			* 无效
			*/
			if (!obj.length){
				return obj;
			}
			/**
			* 遍历
			*/
			obj.find('['+$.wscfg.tips.attrs+']').each(function(){
				if (!$(this).attr('tips-inited')){
					$(this).attr('tips-inited', true).tipsinit();
				}
			});
			/**
			* 递进
			*/
			return obj;
		}
	});
	/*! 事件 */
	$.fn.tipsinit = function(){
		$(this).bind({
			mouseover : function(e){
				var o = $(this), 
					s = $.wscfg.tips.attrs + '-' + $.wscfg.tips.surfix;
				/*!
				* Attributes
				*/
				try{
					var a = {};
						a[s] = o.attr($.wscfg.tips.attrs);
						a[$.wscfg.tips.attrs] = null;
						o.attr(a);
				}catch(err){}
				/*!
				* Display
				*/
				o.tipsopen(e);
			}, mouseout : function(e){
				var o = $(this), 
					s = $.wscfg.tips.attrs + '-' + $.wscfg.tips.surfix;
				/*!
				* Attributes
				*/
				try{
					var a = {};
						a[$.wscfg.tips.attrs] = o.attr(s);
						a[s] = null;
						o.attr(a);
				}catch(err){}
				/*!
				* Hidden
				*/
				o.tipsclose(e);
			}
		});
	};
	/*! 显示 */
	$.fn.tipsopen = function(e){
		var obj = $(this), 
			obe = $('#wsc-tips'); 
		/*!
		* 首次
		*/
		if (obe.length == 0){
			var htm  = '<div id="wsc-tips" class="wsc-tips wsc-ui-static">';
					htm += '<div tips-wrap class="wrap">';
						htm += '<div tips-icon class="icon"></div>';
						htm += '<div tips-text class="text"></div>';
					htm += '</div>';
				htm += '</div>'; $('body').append(htm); obe = $('#wsc-tips')
		}
		/*!
		* 内容
		*/
		obe.find('[tips-text]').text(obj.attr($.wscfg.tips.attrs + '-' + $.wscfg.tips.surfix) || null);
		/*!
		* 位置
		*/
		var ep = {top : e.clientY, left : e.clientX};
			ep.top += $(window).scrollTop() + 20;
			ep.left += $(window).scrollLeft() + 6;
			obe.css(ep).fadeIn($.wscfg.tips.speed);
	};
	/*! 隐藏 */
	$.fn.tipsclose = function(e){
		var obe = $('#wsc-tips'); if (obe.length){
			obe.fadeOut($.wscfg.tips.speed);
		}
	};
})(jQuery);

/*! @source "js/base/toggle.js" */

(function($, undefined) {
	/*! 配置 */
	$.extend($.wscfg, {
		toggle : {}
	});
	/*! 遍历 */
	$.fn.extend({
		wscbase_toggle : function(){
			var obj = $(this) || {};
			/**
			* 无效
			*/
			if (!obj.length){
				return obj;
			}
			/**
			* 遍历
			*/
			obj.find('[toggle]').each(function(){
				if (!$(this).attr('toggle-inited')){
					$(this).attr('toggle-inited', true).toggleinit();
				}
			});
			/**
			* 递进
			*/
			return obj;
		}
	});
	/*! 事件 */
	$.fn.toggleinit = function(){
		var _btn = $(this); _btn.unbind('click').click(function(e){
			e.preventDefault();
			/*!
			* 选择域
			*/
			var _sel = $(this).attr('toggle'); if (_sel){
				var _elem = $(_sel); if (_elem.length == 1){
					var _iconon = _btn.attr('toggle-on') || 'icon-up', 
						_iconoff = _btn.attr('toggle-off') || 'icon-down', 
						_texton = _btn.attr('toggle-text-on'), 
						_textoff = _btn.attr('toggle-text-off');
					/*!
					* 展开
					*/
					if (_elem.css('display') == 'none'){
						_btn.find('.wsc-icon-img').removeClass(_iconoff).addClass(_iconon);
						_elem.removeAttr('style');
						if (_texton){
							_btn.find('[toggle-text]').text(_texton);
						}
					}
					/*!
					* 折叠
					*/
					else {
						_btn.find('.wsc-icon-img').removeClass(_iconon).addClass(_iconoff);
						_elem.css('display', 'none');
						if (_textoff){
							_btn.find('[toggle-text]').text(_textoff);
						}
					}
				}
			}
		});
	};
})(jQuery);

/*! @source "js/once/esc.js" */

﻿/*!
* 注册键盘ESC键(左上角)按下并松开后事件
* #条件
*      1: 被绑定元素必须有esc-close属性
*         如: <div esc-close ..... />
*      2: 被绑定元素必须已注册close方法
*         如: jQuery(selector).data('close', function(){...})
* #顺序
*      执行优先级以zindex值从大到小执行, 每按一次ESC键, 只执行一条
*/
(function($, undefined) {
	/*! 重载 */
	if ($.type($.wscfg.oesc) == 'object'){
		return;
	}
	/*! 配置 */
	$.extend($.wscfg, {
		oesc : {inits : 0}
	});
	/**
	* 初始化按钮
	*/
	$.fn.wsconce_esc = function(){
		$(document).keyup(function(e){
			var code = e.which || e.keyCode || null; if (code != 27){
				return true;
			} var zindex = 0, escobj = null; $('[esc-close]').each(function(){
				var tmp = $(this); if (tmp.css('display') != 'none'){
					var _index = tmp.css('zIndex') || null; if (_index && _index.toString().match(/^([0-9]+)$/)){
						_index = parseInt(_index); if (_index < 1){
							_index = 1;
						}
					} else {
						_index = 1;
					} if (_index > zindex){
						zindex = _index; escobj = tmp;
					}
				}
			}); if (escobj){
				try{
					escobj.data('close')();
				}catch(err){}
			}
		});
	};
})(jQuery);

/*! @source "js/once/imgdelay.js" */

﻿/*!
* 页面图片延迟加载
* #条件
*      指定图片必须有data-src属性(可通过attrs配置), 并且
*      值为图片真实URL路径
*      如: <img src="blank.gif" data-src="图片源地址" ... />
* #原理
*      当图片进入可视区域后，自动将data-src的值更新到src属性
*      中，同时删除data-src属性
* #触发
*      当滚动条变更后，重新计算可视区域, 并载入该区域内的图片
*/
(function($, undefined) {
	/*! 重载 */
	if ($.type($.wscfg.oimgdelay) == 'object'){
		return;
	}
	/*! 配置 */
	$.extend($.wscfg, {
		oimgdelay : {
			inits : 0, 
			attrs : 'data-src', // 属性名称
			times : 350, 		// 延迟时长 
			timer : null,		// 定时句柄
			speed : 500			// 淡入时长
		}
	});
	/*! 注册 */
	$.fn.wsconce_imgdelay = function(){		
		$.fn.wsconce_imgdelay_clear();
		$.fn.wsconce_imgdelay_reset();
	};
	/*! 取消 */
	$.fn.wsconce_imgdelay_clear = function(){
		if ($.wscfg.oimgdelay.timer != null){
			clearInterval($.wscfg.oimgdelay.timer);
			$.wscfg.oimgdelay.timer = null;
		}
	};
	/*! 启动 */
	$.fn.wsconce_imgdelay_reset = function(){
		$.wscfg.oimgdelay.timer = setInterval(function(){
			$.fn.wsconce_imgdelay_clear();
			$.fn.imgdelay();
		}, $.wscfg.oimgdelay.times);
	};
	/*! 执行 */
	$.fn.imgdelay = function(){
		var obj = $(this); if (!obj.length){
			obj = $('body');
		}
		/*! 可视 
		* @var object view = {
		*     xmin : int, // X最小值
		*     xmax : int, // X最大值
		*     ymin : int, // Y最小值
		*     ymax : int  // Y最大值
		* }
		*/
		var view = {xmin : $(window).scrollLeft(), ymin : $(window).scrollTop()};
			view.xmax = view.xmin + $(window).width();
			view.ymax = view.ymin + $(window).height();
		/*! 遍历 */
		obj.find('img['+$.wscfg.oimgdelay.attrs+']').each(function(){
			var temp = $(this), offs = temp.offset(), 
				elem = {xmin : offs.left, ymin : offs.top};
				elem.xmax = elem.xmin + temp.outerWidth();
				elem.ymax = elem.ymin + temp.outerHeight();
			/*! 计算 */
			var done = false; if (elem.ymax > view.ymin && elem.ymin < view.ymax){
				if (elem.xmax > view.xmin && elem.xmin < view.xmax){
					done = true;
				}
			}
			/*! 加载 */
			if (done){
				var attrs = {};
					attrs['src'] = temp.attr($.wscfg.oimgdelay.attrs);
					attrs[$.wscfg.oimgdelay.attrs] = null;
				temp.addClass('wsc-ui-static').stop().css('opacity', 0).attr(attrs).animate({opacity : 1}, $.wscfg.oimgdelay.speed, function(){
					$(this).removeClass('wsc-ui-static');
				});
			}
		});
	};
})(jQuery);

/*! @source "js/once/resize.js" */

﻿/*!
* 当浏览器窗口尺寸变更时事件
* #特殊需求, 一般很少使用
*/
(function($, undefined) {
	/*! 重载 */
	if ($.type($.wscfg.oresize) == 'object'){
		return;
	}
	/*! 配置 */
	$.extend($.wscfg, {
		oresize : {inits : 0}
	});
	/**
	* 初始化按钮
	*/
	$.fn.wsconce_resize = function(){};
})(jQuery);

/*! @source "js/once/scroll.js" */

﻿/*!
* 当滚动条变更时事件
* #系统默认只有少许事件(如图片延迟加载), 页面特殊
*  需求时, 可在指定页面定义继承pagescroll方法
*　如: $.fn.pagescroll = function(){...};
*/
(function($, undefined) {
	/*! 重载 */
	if ($.type($.wscfg.oscroll) == 'object'){
		return;
	}
	/*! 配置 */
	$.extend($.wscfg, {
		oscroll : {
			inits : 0, 
			times : 350, 		// 延迟时长 
			timer : null		// 定时句柄
		}
	});
	/*! 注册 */
	$.fn.wsconce_scroll = function(){
		$(window).scroll(function(){
			$.fn.wsconce_scroll_clear();
			$.fn.wsconce_scroll_reset();
		});
	};
	/*! 取消 */
	$.fn.wsconce_scroll_clear = function(){
		if ($.wscfg.oscroll.timer != null){
			clearInterval($.wscfg.oscroll.timer);
			$.wscfg.oscroll.timer = null;
		}
	};
	/*! 启动 */
	$.fn.wsconce_scroll_reset = function(){
		$.wscfg.oscroll.timer = setInterval(function(){
			$.fn.wsconce_scroll_clear();
			$.fn.wsconce_scroll_query();
		}, $.wscfg.oscroll.times);
	};
	/*! 执行 */
	$.fn.wsconce_scroll_query = function(){
		/*! 页面 */
		try{
			$.fn.pagescroll();
		}catch(err){}
		/*! 元素 */
		try{
			$('[page-scroll]').data('scroll')();
		}catch(err){}
		/*! 图片延迟加载 */
		try{
			$('body').imgdelay();
		}catch(err){}
	};
})(jQuery);

/*! @source "js/once/sso.js" */

﻿/*!
* SSO单点登陆控制
*/
(function($, undefined) {
	/**
	* 用户登陆后返回
	* @param mixed object {
	*     auth : string,   // 客户端PHPSESSID
	*     domain : string, // 作用域
	*     src : string,    // 完整URL
	* }
	*/
	$.fn.ssoform = function(o, url){
		var sid = 'sso-login-process', 
			sobj = $('#'+sid);
		/*!
		* 首载
		*/
		if (sobj.length == 0){
			$('body').append('<div id="'+sid+'" style="display:none" />'); sobj = $('#'+sid)
		}
		/*!
		* 递归到SSO容器
		*/
		$(o).each(function(k, v){
			if ($.type(v) == 'object' && v.auth && v.src){
				var url = v.src;
					url += '?authkey=';
					url += v.auth; sobj.append('<iframe src="'+url+'" style="display:none" />');
			}
		});
		/*!
		* iFrame模式时, 视Frame网络值可能有快慢之差
		* @note 故延迟1秒后跳转
		*/
		var url = url || window.location.href, 
			sec = 1500;
			url = url.replace(/\site\/login(.*)/g, '');
		setTimeout(function(){
			$.fn.redirect(url);
		}, sec);
	};
})(jQuery);

/*! @source "js/plugins/alert.js" */

/*!
* 弹窗消息
*/
(function($){
	$.extend($.wscfg.plugins, {
		wscalert : {
			speed : 150, 
			btn : {
				no : '取消', 
				yes : '确定'
			}
		}
	});
	/*!
	* 弹窗配置
	* @param object o, 接受参数
	* @param function f, 回调方法
	*/
	$.fn.wscalert = function(s, f){
		/*!
		* @var object o, 配置
		*             string text, 消息内容[支持HTML]
		*             string type, 消息类型[alert|info|success]
		*             function call, 回调方法
		*             boolean yes, 确定按钮
		*             boolean no, 取消按钮
		*/
		var o = {call : false, text : '&#160;', type : 'alert', yes : true, no : false};
			o.obj = $(this);
			o.masker = true;
		/*!
		* 对象
		* @param object s, 对象参数
		*               string type, 类型success|info|error
		*               string text, 文档内容[支持HTML]
		* @example $(selector).wscalert({text : 'Content', type : 'info'})
		*/
		if ($.isPlainObject(s)){
			if (s.text && $.type(s.text) === 'string'){
				o.text = s.text || $.wscfg.plugins.wscalert.btn.yes;
			} if (s.type && $.type(s.type) === 'string'){
				o.type = s.type;
			} if (s.call && $.type(s.call) === 'function'){
				o.call = s.call;
			} if ($.type(s.masker) != 'undefined'){
				o.masker = s.masker ? true : false;
			}
			/*!
			* 按钮文字
			*/
			if (s.yestext){
				o.yestext = s.yestext;
			}
			o.yestext = s.yestext || $.wscfg.plugins.wscalert.btn.yes;
			o.notext = s.notext || $.wscfg.plugins.wscalert.btn.no;
		}
		/*!
		* 字符
		* @param string s, 简易文本
		*/
		else if (s && $.type(s) === 'string'){
			o.text = s;
		}
		/*!
		* 回调
		*/
		if (!o.call && f && $.type(f) === 'function'){
			o.call = f;
		} if (o.call){
			o.type = o.type || 'info';
			o.no = o.type == 'info' ? true : false;
		}
		/*!
		* 载入
		*/
		var e = {};
			e.div = $('#wscore-alert');
		if (e.div.length == 0){
			var x  = '<div esc-close id="wscore-alert" class="wsc-alert wsc-ui-static"></div>';
				x += '<div id="wscore-alert-masker" class="wsc-alert-masker wsc-ui-static"></div>';
			$('body').append(x); e.div = $('#wscore-alert');
		} e.msk = $('#wscore-alert-masker');
		/*!
		* 事件
		*/
		e.div.data({
			/*!
			* 显示
			*/
			open : function(){
				/*!
				* 文档与事件
				*/
				var htm = '';
					htm += '<div class="text">';
						htm += '<a alert-button="no" href="javascript:void(0)" class="cls" title="'+(o.notext || $.wscfg.plugins.wscalert.btn.no)+'"></a>';
						htm += '<div class="ico '+o.type+'"></div>';
						htm += '<div class="txt">';
							htm += o.text.toString().replace(/\n/g, '<br />');
						htm += '</div>';
					htm += '</div>';
					htm += '<div class="btns">';
						htm += '<a alert-button="yes" href="javascript:void(0)" class="btn yes inline">'+(o.yestext || $.wscfg.plugins.wscalert.btn.yes)+'</a>';
						htm += o.no ? '<a alert-button="no" href="javascript:void(0)" class="btn no inline">'+(o.notext || $.wscfg.plugins.wscalert.btn.no)+'</a>' : '';
					htm += '</div>'; e.div.html(htm).wscload().wscalert_event(e, o);
				/*!
				* 覆盖层
				*/					
				if (e.msk){
					var mcs = {display : 'block', top : 0, left : 0};
						mcs.width = $(window).width();
						mcs.width = Math.max(mcs.width, $('body').outerWidth());
						mcs.height = $(window).height();
						mcs.height = Math.max(mcs.height, $('body').outerHeight());					
						e.msk.finish().css(mcs);
				}
				/*!
				* 窗口位置
				*/
				var dcs = {top : $(window).height() - e.div.outerHeight()};
					dcs.top = dcs.top / 2; dcs.top = parseInt(dcs.top);
					dcs.top += $(window).scrollTop();
					dcs.left = '50%';
					dcs.marginLeft = e.div.outerWidth();
					dcs.marginLeft = dcs.marginLeft / 2; dcs.marginLeft = parseInt(dcs.marginLeft); dcs.marginLeft *= -1;
					e.div.finish().css(dcs).show($.wscfg.plugins.wscalert.speed);
			}, 
			close : function(){
				/*!
				* 隐藏
				*/
				e.msk.css('display', 'none');
				e.div.unbind().removeData().hide($.wscfg.plugins.wscalert.speed);
				/*!
				* 键盘
				*/
				$('html').unbind('keyup');
			}
		});
		/*!
		* 显示
		*/
		try{
			e.div.data('open')();
		}catch(err){
			alert(err);
		}
	};
	/*!
	* 事件
	*/
	$.fn.wscalert_event = function(o, s){
		var obj = $(this);
		/*!
		* 键盘
		*/
		$('html').unbind('keyup').keyup(function(e){
			var k = e.which || e.keyCode || 0; if (k == 13 || k == 32){
				e.preventDefault();
				obj.find('a[alert-button="yes"]').click();
			}
		});
		/*!
		* 按钮
		*/
		obj.find('[alert-button]').click(function(){
			try{
				o.div.data('close')();
			}catch(err){} var _btn = $(this).attr('alert-button'); if (_btn == 'yes'){
				if (s.call){
					s.call();
				}
			}
		});
	}
})(jQuery);
/*!
* 重设系统方法
*/
var alert = function(s){
	$.fn.wscalert(s);
}, confirm = function(){
	arguments.length > 1 ? 
	$.fn.wscalert(arguments[0], arguments[1]) : 
	$.fn.wscalert(arguments[0]);
};

/*! @source "js/plugins/datepicker.js" */

/*!
* 日历插件
* @var object o = {
*    start : function, 日历载入前执行
*    stop : function, 日历载入后执行
*    select : function, 日期选中后回调
*
*    seldate : plainObject , 已选日期(return $.fn.isdate)
*    mindate : plainObject , 最小日期(return $.fn.isdate)
*    maxdate : plainObject , 最大日期(return $.fn.isdate)
*
* }
*/
(function($){
	$.extend($.wscfg.plugins, {
		datepicker : {
			ani : {
				open : true, 
				speed : 75, 
				easing : 'swing' // swing | linear
			},
		
			y : '年', 
			m : '月', 
			d : '日',

			prev : '上月', 
			next : '下月',
			role_year : '切换年份', 
			role_month : '切换月份', 
			role_empty : '清空选定', 

			wk0 : '日',
			wk1 : '一',
			wk2 : '二',
			wk3 : '三',
			wk4 : '四',
			wk5 : '五',
			wk6 : '六', 
			fixcss : 'style="margin:0;padding:0;width:auto;height:auto;text-align:center;overflow:hidden;border:none;background:none;"', 

			delay_handle : null, 
			delay_second : 150
			
		}
	});
	/*!
	* 载入日历
	* @param object o, 接受参数
	*/
	$.fn.datepicker=function(o){
		var o = o || {}, obj = $(this);
			o.select = o.select || null;
			o.start = o.start || null;
		/*!
		* 前执行
		*/
		if ($.type(o.start) == 'function'){
			try{
				o.start();
			}catch(err){}
		}
		/*!
		* 执行中
		*/
		var cfg = $.fn.datepicker_ini(o);
			obj.html('').datepicker_day(o, cfg);
		/*!
		* 执行后
		*/
		if ($.type(o.stop) == 'function'){
			try{
				o.stop();
			}catch(err){}
		}
		return;
	};
	/*!
	* 日历工具
	*/
	$.fn.extend({
		/*!
		* 日历参数初始化
		* @return object = {
		*     datesel : object, // 当前默认值
		*     datepop : object, // 日历选择域
		*     datemin : object, // 最小范围
		*     datemax : object, // 最大范围
		* }
		*/
		datepicker_ini : function(o){
			var cfg = {};
			/*!
			* 已选
			*/
			cfg.datesel = $.fn.isdate(o.datesel, true); if (cfg.datesel.i == 0){
			cfg.datesel = $.fn.isdate($.wscfg.today.y+'-'+$.wscfg.today.m+'-'+$.wscfg.today.d, true); }
			/*!
			* 最小
			*/
			var _min = {i : 0}; if (o.datemin){
				var _minstr = $.fn.isdatescope(true, o.datemin); if (_minstr && _minstr.i > 0){
					_min = _minstr;
				}
			} if (o.dateminfor){
				var _minfor = $.fn.isdate(o.dateminfor); if (_minfor && _minfor.i > 0){
					if (_min.i == 0 || _minfor.i > _min.i){
						_min = _minfor;
					}
				}
			}  cfg.datemin = _min;
			/*!
			* 最大
			*/
			var _max = {i : 0}; if (o.datemax){
				var _maxstr = $.fn.isdatescope(true, o.datemax); if (_maxstr && _maxstr.i > 0){
					_max = _maxstr;
				}
			} if (o.datemaxfor){
				var _maxfor = $.fn.isdate(o.datemaxfor); if (_maxfor && _maxfor.i > 0){
					if (_max.i == 0 || _maxfor.i < _max.i){
						_max = _maxfor;
					}
				}
			} cfg.datemax = _max;
			/*!
			* 可选
			*/
			cfg.datepop = cfg.datesel; if (cfg.datemin.i > 0 && cfg.datepop.i < cfg.datemin.i){
				cfg.datepop = cfg.datemin;
			} if (cfg.datemax.i > 0 && cfg.datepop.i > cfg.datemax.i){
				cfg.datepop = cfg.datemax;
			} return cfg;
		},
		/*!
		* 返回月份选择
		* @return string html, 日历HTML文档
		*/
		datepicker_year : function(o, cfg){
			var htm  = '', obj = $(this);//, cfg = $.fn.datepicker_ini(o);
				htm += '<div class="wsc-datepicker-wrap wsc-ui-static">';
					htm += '<div class="wsc-datepicker-head">';
						htm += '<a class="inline h1" data-role="year" data-value="'+(cfg.datepop.y-12)+'-'+cfg.datepop.m+'-'+cfg.datepop.d+'" title="" href="#">&lt;</a>';
						htm += '<a class="inline h2" href="#">'+cfg.datepop.y+'-'+(cfg.datepop.y+12-1)+'</a>';
						htm += '<a class="inline h3" data-role="year" data-value="'+(cfg.datepop.y+12)+'-'+cfg.datepop.m+'-'+cfg.datepop.d+'" title="" href="#">&gt;</a>';
					htm += '</div>';
					htm += '<div class="wsc-datepicker-body wsc-datepicker-year">';
						htm += '<table style="border:none"><tr>';

						
						
							var n = 0; for (var i = cfg.datepop.y; i < (cfg.datepop.y+12); i++){n++;
								htm += '<td '+$.wscfg.plugins.datepicker.fixcss+'>';
									htm += '<a'+(i == cfg.datepop.y ? ' class="hover"' : '')+' data-role="month" data-value="'+i+'-'+cfg.datepop.y+'-'+cfg.datepop.d+'" title="'+cfg.datepop.y+$.wscfg.plugins.datepicker.y+i+$.wscfg.plugins.datepicker.m+'" href="#">';
									htm += i;
									htm += '</a>';
								htm += '</td>'; if (n == 3 || n == 6 || n == 9){
								htm += '</tr><tr>'; }
							}
							
						htm += '</tr></table>';
					htm += '</div>';
				htm += '</div>';
			/*!
			* 更新DOM设置事件
			*/
			obj.datepicker_ani(htm, false, function(){
				obj.datepicker_event(o, cfg);
			});
		},
		/*!
		* 返回月份选择
		* @return string html, 日历HTML文档
		*/
		datepicker_month : function(o, cfg){
			var htm  = '', obj = $(this);//, cfg = $.fn.datepicker_ini(o);
				htm += '<div class="wsc-datepicker-wrap wsc-ui-static">';
					htm += '<div class="wsc-datepicker-head">';
						htm += '<a class="inline h1" data-role="month" data-value="'+(cfg.datepop.y-1)+'-'+cfg.datepop.m+'-'+cfg.datepop.d+'" title="" href="#">&lt;</a>';
						htm += '<a class="inline h2" data-role="year" title="'+$.wscfg.plugins.datepicker.role_month+'" href="#">'+cfg.datepop.y+$.wscfg.plugins.datepicker.y+'</a>';
						htm += '<a class="inline h3" data-role="month" data-value="'+(cfg.datepop.y+1)+'-'+cfg.datepop.m+'-'+cfg.datepop.d+'" title="" href="#">&gt;</a>';
					htm += '</div>';
					htm += '<div class="wsc-datepicker-body wsc-datepicker-month">';
						htm += '<table style="border:none"><tr>';
							
							for (var i = 1; i <= 12; i++){
								htm += '<td '+$.wscfg.plugins.datepicker.fixcss+'>';
									htm += '<a'+(i == cfg.datepop.m ? ' class="hover"' : '')+' data-role="days" data-value="'+cfg.datepop.y+'-'+i+'-'+cfg.datepop.d+'" title="'+cfg.datepop.y+$.wscfg.plugins.datepicker.y+i+$.wscfg.plugins.datepicker.m+'" href="#">';
									htm += i;
									htm += '</a>';
								htm += '</td>'; if (i == 4 || i == 8){
								htm += '</tr><tr>'; }
							}
							
						htm += '</tr></table>';
					htm += '</div>';
				htm += '</div>';
			/*!
			* 更新DOM设置事件
			*/
			obj.datepicker_ani(htm, false, function(){
				obj.datepicker_event(o, cfg);
			});
		},
		/*!
		* 返回日历选择
		* @return string html, 日历HTML文档
		*/
		datepicker_day : function(o, cfg, dir){
			var htm  = '', obj = $(this);//, cfg = $.fn.datepicker_ini(o);
				htm += '<div class="wsc-datepicker-wrap wsc-ui-static">';
					htm += '<div class="wsc-datepicker-head">';
						htm += '<a class="inline h1" data-role="prev" title="'+$.wscfg.plugins.datepicker.prev+'" href="#">&lt;</a>';
						htm += '<a class="inline h2" data-role="month" title="'+$.wscfg.plugins.datepicker.role_month+'" href="#">'+cfg.datepop.y+$.wscfg.plugins.datepicker.y+cfg.datepop.m+$.wscfg.plugins.datepicker.m+'</a>';
						htm += '<a class="inline h3" data-role="next" title="'+$.wscfg.plugins.datepicker.next+'" href="#">&gt;</a>';
					htm += '</div>';
					htm += '<div class="wsc-datepicker-body wsc-datepicker-day">';
						htm += '<table style="border:none"><tr>';
							/*!
							* 星期
							*/
							htm += '<thead>';
								htm += '<tr>';
									htm += '<th '+$.wscfg.plugins.datepicker.fixcss+'><strong>'+$.wscfg.plugins.datepicker.wk0+'</strong></th>';
									htm += '<th '+$.wscfg.plugins.datepicker.fixcss+'><strong>'+$.wscfg.plugins.datepicker.wk1+'</strong></th>';
									htm += '<th '+$.wscfg.plugins.datepicker.fixcss+'><strong>'+$.wscfg.plugins.datepicker.wk2+'</strong></th>';
									htm += '<th '+$.wscfg.plugins.datepicker.fixcss+'><strong>'+$.wscfg.plugins.datepicker.wk3+'</strong></th>';
									htm += '<th '+$.wscfg.plugins.datepicker.fixcss+'><strong>'+$.wscfg.plugins.datepicker.wk4+'</strong></th>';
									htm += '<th '+$.wscfg.plugins.datepicker.fixcss+'><strong>'+$.wscfg.plugins.datepicker.wk5+'</strong></th>';
									htm += '<th '+$.wscfg.plugins.datepicker.fixcss+'><strong>'+$.wscfg.plugins.datepicker.wk6+'</strong></th>';
								htm += '</tr>';
							htm += '</thead>';
							/*!
							* 日期
							*/
							htm += '<tbody><tr>';
								/*!
								* 前空
								*/
								if (cfg.datepop.p > 0){
									htm += '<td'+(cfg.datepop.p > 1 ? ' colspan="'+cfg.datepop.p+'"' : '')+' '+$.wscfg.plugins.datepicker.fixcss+'></td>';
								}
								/*!
								* 天数
								*/
								var _tds = cfg.datepop.p; for (var i = 1; i <= cfg.datepop.w; i++){
									var _tdi = cfg.datepop.y * 10000 + cfg.datepop.m * 100 + i;								
									htm += '<td '+$.wscfg.plugins.datepicker.fixcss+'>';
										if ((cfg.datemin.i && _tdi < cfg.datemin.i) || (cfg.datemax.i && _tdi > cfg.datemax.i)){
											htm += '<em>'+i+'</em>';
										} else {
											var _tdtitle = cfg.datepop.y;
												_tdtitle += $.wscfg.plugins.datepicker.y;
												_tdtitle += cfg.datepop.m;
												_tdtitle += $.wscfg.plugins.datepicker.m;
												_tdtitle += i;
												_tdtitle += $.wscfg.plugins.datepicker.d;
											htm += '<a'+(_tdi == cfg.datesel.i ? ' class="hover"' : '')+' data-role="select" data-value="'+cfg.datepop.y+'-'+cfg.datepop.m+'-'+i+'" title="'+_tdtitle+'" href="#">';
											htm += i;
											htm += '</a>';
										}
									htm += '</td>'; _tds++; if (_tds % 7 == 0 && i < cfg.datepop.w){
										htm += '</tr><tr>';
									}
								}
								/*!
								* 后空
								*/
								if (_tds  % 7 > 0){
									_tds = 7 - _tds % 7;
									htm += '<td'+(_tds > 1 ? ' colspan="'+_tds+'"' : '')+' '+$.wscfg.plugins.datepicker.fixcss+'></td>';
								}
							htm += '</tr></tbody>';
						htm += '</tr></table>'; if (o.datesel){
						htm += '<div class="empty"><a data-role="select" data-value="" title="'+$.wscfg.plugins.datepicker.role_empty+'" href="#">'+$.wscfg.plugins.datepicker.role_empty+'</a></div>';}
					htm += '</div>';
				htm += '</div>';
			/*!
			* 更新DOM设置事件
			*/
			obj.datepicker_ani(htm, dir, function(){
				obj.datepicker_event(o, cfg);
			});
		},
		/*!
		* 效果
		*/
		datepicker_ani : function(s, dir, fn){
			var obj = $(this); if ($.wscfg.plugins.datepicker.ani.open){
				var div = obj.find('.wsc-datepicker-wrap')
			} else {
				var div = {length : 0};
			}
			/*!
			* 动态
			*/
			if (div.length > 0){

				var _old_style = obj.attr('old-style'); if ($.type(_old_style) == 'undefined'){
					_old_style = obj.attr('old-style', obj.attr('style')); }
			
			
				var _fix = {overflow : 'hidden'};
					_fix.width = obj.width();
					_fix.height = obj.height(); obj.css(_fix);
				div.css({position : 'absolute', top : 0, left : 0, width : div.width()});
				var _new = null, 
					_ncs = {position : 'absolute', top : 0};
				if (!dir){
					obj.append(s); 
					_new = obj.find('.wsc-datepicker-wrap').last();
					_ncs.left = _fix.width;
				} else {
					obj.prepend(s); _new = obj.find('.wsc-datepicker-wrap').first();
					_ncs.left = _fix.width * -1;
				} _new.css(_ncs);
				var _ani = {};
					_ani.left = (dir ? '+' : '-') + '=' + _fix.width;
				obj.find('.wsc-datepicker-wrap').stop().animate(_ani, $.wscfg.plugins.datepicker.ani.speed, $.wscfg.plugins.datepicker.ani.easing, function(){
					div.remove();
					obj.attr('style', obj.attr('old-style')); _new.attr('style', null);
					try{fn()}catch(err){}
				});
				return;
			}
			/*!
			* 静态
			*/
			obj.html(s); try{fn()}catch(err){}
		},
		/*!
		* 事件
		*/
		datepicker_event : function(o, cfg){
			var obj = $(this); obj.find('a').unbind('click').click(function(e){
				var obe = $(this); e.preventDefault();
				/*!
				* 延迟/避免与outclick冲突
				*/
				if ($.wscfg.plugins.datepicker.delay_handle != null){
					clearInterval($.wscfg.plugins.datepicker.delay_handle);
					$.wscfg.plugins.datepicker.delay_handle = null;
				} $.wscfg.plugins.datepicker.delay_handle = setTimeout(function(){
					clearInterval($.wscfg.plugins.datepicker.delay_handle);
					$.wscfg.plugins.datepicker.delay_handle = null;
					/*!
					* 操作
					*/
					var role = obe.attr('data-role'), 
						value = obe.attr('data-value');
					/*!
					* 前后月日期列表
					*/
					if (role == 'prev' || role == 'next'){
						var datepop = cfg.datepop.s; if (role == 'prev'){
							if (cfg.datepop.m == 1){
								datepop = (cfg.datepop.y-1)+'-12-'+cfg.datepop.d;
							} else {
								datepop = cfg.datepop.y+'-'+(cfg.datepop.m-1)+'-'+cfg.datepop.d;
							}
						} else {
							if (cfg.datepop.m == 12){
								datepop = (cfg.datepop.y+1)+'-1-'+cfg.datepop.d;
							} else {
								datepop = cfg.datepop.y+'-'+(cfg.datepop.m+1)+'-'+cfg.datepop.d;
							}
						} cfg.datepop = $.fn.isdate(datepop, true); obj.datepicker_day(o, cfg, role == 'prev' ? true : false);
					} 
					/*!
					* 按月读取日期列表
					*/
					else if (role == 'days'){
						cfg.datepop = $.fn.isdate(value, true);
						obj.datepicker_day(o, cfg);
					}
					/*!
					* 当前年份下的12个月份列表
					*/
					else if (role == 'month') {
						var _pop = $.fn.isdate(value, true); if (_pop.i > 0){
							cfg.datepop = _pop;}
						obj.datepicker_month(o, cfg);
					}
					/*!
					* 当前年份下的12个有区间年份
					*/
					else if (role == 'year') {
						var _pop = $.fn.isdate(value, true); if (_pop.i > 0){
							cfg.datepop = _pop;}
						obj.datepicker_year(o, cfg);
					}
					/*!
					* 选择
					*/
					else if (role == 'select'){
						var datesel = $.fn.isdate(value);
							value = datesel.i ? datesel.s : '';
						try{
							o.select(value);
						}catch(err){}
					}
				}, $.wscfg.plugins.datepicker.delay_second);
			});
		}
	});
})(jQuery);

/*! @source "js/plugins/draggable.js" */

/*!
* 拖拽可移动
* @var object o = {
*     box : object, // 待移动ELement
*     handle : object, // 拖拽此标识时，o.box移动
*     container : object, // 待移动o.box必须在此范围以内
*
*     start : function, 	// 拖拽前执行
*     stop : function 		// 拖拽后执行
* }
*/
(function($){
	$.fn.draggable=function(o){
		var o = o || {};
			o.box = $(this);
		/*!
		* 无效Element
		*/
		if (o.box.length == 0){
			return;
		}
		/*!
		* 句柄Handle
		*/
		o.container = o.container || $('body'); if (o.handle){
			o.handle.attr('title', '拖拽可移动位置').css('cursor', 'move');
		} else {
			o.handle = o.box;
		}
		/*!
		* Event
		*/
		var _events = {
			'mousedown' : function(e){
				var _last = o.box.offset();
					_last.x = e.clientX;
					_last.y = e.clientY;
				/*!
				* 全局事件
				*/
				$(document).bind({
					'mouseup' : function(e){
						/*!
						* 清除事件
						*/
						$(document).unbind('mouseup').unbind('mousemove');
						/*!
						* 完成拖拽
						*/
						try{
							o.stop(o, e);
						}catch(err){}
					}, 
					'mousemove' : function(e){
						/*!
						* 改变位置
						*/
						var _curr = {};
							_curr.x = e.clientX; _curr.x -= _last.x;
							_curr.y = e.clientY; _curr.y -= _last.y;
						var _ncss = {
							top : _last.top + _curr.y, 
							left : _last.left + _curr.x
						};
						/*!
						* 显示范围
						*/
						var _maxo = o.container.offset();
							_maxo.maxleft -= o.box.outerWidth();
							_maxo.maxleft = _maxo.left + o.container.outerWidth();
							_maxo.maxleft -= o.box.outerWidth();
						if (_ncss.left < _maxo.left){
							_ncss.left = _maxo.left;
						} else if (_ncss.left > _maxo.maxleft){
							_ncss.left = _maxo.maxleft;
						} if (_ncss.top < _maxo.top){
							_ncss.top = _maxo.top;
						} o.box.css(_ncss);
						/*!
						* 禁止原事件
						*/
						e.preventDefault();
					}
				});
				/*!
				* 拖拽前执行
				*/
				try{
					o.start(o, e);
				}catch(err){}
			}
		};
		/*!
		* 注册事件
		*/
		$.each(_events, function(_ek, _ev){
			o.handle.unbind(_ek).bind(_ek, _ev);
		});
	};
})(jQuery);

/*! @source "js/plugins/editor.js" */

/*!
* 载入编辑器
* 所见即所得
*/
(function($){
	/*!
	* 载入配置
	*/
	$.wscfg.editor = $.wscfg.editor || {}; $.extend($.wscfg.editor, {
		/*!
		* 宽高比
		*/
		width : 600, height : 220, 
		imagesize : {width : 590, height : 0},
		videosize : {width : 590, height : 375},
		musicsize : {width : 290, height : 24},
		uploadsrc : {
			editormusic : 'http://upload.wudaotv.com/api/music.php?vkey=', 
			editorvideo : 'http://www.dance365.com/cdplayer/cdplayer.swf?f=%60s%60p%601%607%600%600%60w%601%60o%60u%60d%60v%608%60a%60s%609%604%60d%60v%60d%604%60a%603%608%60a%60u%60z%600%60d%601%609%600%60k%609%60v%603%60u%608%601%60s%601%602%60k%605%603%60l'
		},
		/*!
		* 工具栏
		*/
		toolbars : {
			/*!
			* 公共工具栏
			*/
			simple : [
				[
					// 'source', 
					'bold', 'forecolor', '|', 
					'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 
					'wscimage', 'wscvideo', 'wscmusic', 'wscemote'
				]
			], 
			/*!
			* 带隐藏按钮
			*/
			usehide : [
				[
					// 'source', 
					'bold', 'forecolor', '|', 
					'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 
					'wscimage', 'wscvideo', 'wscmusic', 'wscemote', '|', 'wschider'
				]
			]
		}, 
		filters : function(){
			return {};
			/*!
			return {
				span:function(node) {
					if (/Wingdings|Symbol/.test(node.getStyle("font-family"))) {
						return true;
					} else {
						node.parentNode.removeChild(node, true);
					}
				},
				p:function(node) {
					var listTag;
					if (node.getAttr("class") == "MsoListParagraph") {
						listTag = "MsoListParagraph";
					}
					node.setAttr();
					if (listTag) {
						node.setAttr("class", "MsoListParagraph");
					}
					if (!node.firstChild()) {
						node.innerHTML(UM.browser.ie ? "&nbsp;" :"<br>");
					}
				},
				div:function(node) {
					var tmpNode, p = UM.uNode.createElement("p");
					while (tmpNode = node.firstChild()) {
						if (tmpNode.type == "text" || !UM.dom.dtd.$block[tmpNode.tagName]) {
							p.appendChild(tmpNode);
						} else {
							if (p.firstChild()) {
								node.parentNode.insertBefore(p, node);
								p = UM.uNode.createElement("p");
							} else {
								node.parentNode.insertBefore(tmpNode, node);
							}
						}
					}
					if (p.firstChild()) {
						node.parentNode.insertBefore(p, node);
					}
					node.parentNode.removeChild(node);
				},
				br:{
					$:{}
				},
				a:function(node) {
					if (!node.firstChild()) {
						node.parentNode.removeChild(node);
						return;
					}
					node.setAttr();
					node.setAttr("href", "#");
				},
				strong:{
					$:{}
				},
				b:function(node) {
					node.tagName = "strong";
				},
				i:function(node) {
					node.tagName = "em";
				},
				em:{
					$:{}
				},
				img:function(node) {
					var src = node.getAttr("src");
					node.setAttr();
					node.setAttr({
						src:src
					});
				},
				ol:{
					$:{}
				},
				ul:{
					$:{}
				},
				dl:function(node) {
					node.tagName = "ul";
					node.setAttr();
				},
				dt:function(node) {
					node.tagName = "li";
					node.setAttr();
				},
				dd:function(node) {
					node.tagName = "li";
					node.setAttr();
				},
				li:function(node) {
					var className = node.getAttr("class");
					if (!className || !/list\-/.test(className)) {
						node.setAttr();
					}
					var tmpNodes = node.getNodesByTagName("ol ul");
					UM.utils.each(tmpNodes, function(n) {
						node.parentNode.insertAfter(n, node);
					});
				},
				table:function(node) {
					UM.utils.each(node.getNodesByTagName("table"), function(t) {
						UM.utils.each(t.getNodesByTagName("tr"), function(tr) {
							var p = UM.uNode.createElement("p"), child, html = [];
							while (child = tr.firstChild()) {
								html.push(child.innerHTML());
								tr.removeChild(child);
							}
							p.innerHTML(html.join("&nbsp;&nbsp;"));
							t.parentNode.insertBefore(p, t);
						});
						t.parentNode.removeChild(t);
					});
					var val = node.getAttr("width");
					node.setAttr();
					if (val) {
						node.setAttr("width", val);
					}
				},
				tbody:{
					$:{}
				},
				caption:{
					$:{}
				},
				th:{
					$:{}
				},
				td:{
					$:{
						valign:1,
						align:1,
						rowspan:1,
						colspan:1,
						width:1,
						height:1
					}
				},
				tr:{
					$:{}
				},
				h3:{
					$:{}
				},
				h2:{
					$:{}
				},
				"-":"script style meta iframe embed object"
			};
			*/
		},
		/*!
		* 工具名
		*/
		lables : {
			'wscimage' : '插入图片', 
			'wscvideo' : '插入视频', 
			'wscmusic' : '插入音乐', 
			'wscemote' : '插入表情', 
			'wschider' : '回复后可见', 
			'wschider_days' : 30 // 设置隐藏[n天内免提醒]
		},
		lang : {
			wschider : '确定要隐藏选中内容?\n隐藏后只有回复/评论之后才能查看本段内容'
		},
		/*!
		* 临时项
		*/
		_src : false, 
		_srcdone : false, 
		_srcpush : 0, 
		_srcload : {}
	});
	/*!
	* 载入
	*/
	$.fn.wsceditor = function(o){
		/*!
		* 配置
		*/
		var o = o || {};
			o.elem = o.elem || $(this);
		if (o.elem && o.elem.length == 1){
			o._editor = {};
			/*!
			* ID
			*/
			o._editor.id = o.id || o.elem.attr('id'); if (!o._editor.id){o._editor.id = 'wscore-form-editor-'+$.wscfg.editor.loop; o.elem.attr('id', o._editor.id);}
			/*!
			* SIZE
			*/
			var _uw = o.elem.attr('editor-width'), 
				_uh = o.elem.attr('editor-height');
			o._editor.width = $.wscfg.editor.width; if (_uw && _uw.toString().match(/^([0-9]+)$/)){
			o._editor.width = parseInt(_uw); }
			o._editor.height = $.wscfg.editor.height; if (_uh && _uh.toString().match(/^([0-9]+)$/)){
			o._editor.height = parseInt(_uh); }
			/*!
			* TOOLBAR
			*/
			var _mode = o.elem.attr('editor-mode'); if (_mode && $.wscfg.editor.toolbars[_mode]){
			o._editor.toolbar = $.wscfg.editor.toolbars[_mode];} else {
			o._editor.toolbar = $.wscfg.editor.toolbars['simple'];}
			/*!
			* Append
			*/
			$.wscfg.editor._srcpush++; 
			$.wscfg.editor._srcload['editor'+$.wscfg.editor._srcpush] = o;
			$.fn.wsceditor_src();
		}
	};
	$.fn.wsceditor_src = function(){
		/*!
		* 资源已载入
		*/
		if ($.wscfg.editor._srcdone){
			$.fn.wsceditor_init();
			return true;
		}
		/*!
		* 重复时
		*/
		if ($.wscfg.editor._src){
			return false;
		}
		/*!
		* 首载入
		*/
		var _editor_path = $.wscfg.core.path + 'plugins/ueditor/', 
			_editor_file = ['ueditor.config.js', 'ueditor.all.js', 'lang/zh-cn/zh-cn.js'], 
			_editor_lens = _editor_file.length, 
			_editor_load = 0; $.wscfg.editor._src = true;
		var _ajax = {dataType : 'script', cache : true}; window.UEDITOR_HOME_URL = _editor_path; for (var i = 0; i < _editor_lens; i++){
			_ajax.url = _editor_path + _editor_file[i]; 
			$.fn.require(_ajax, function(){
				_editor_load++; if (_editor_load == _editor_lens && typeof UE === 'object'){
					$.wscfg.editor._srcdone = true;
					$.fn.wsceditor_init();
				}
			});
		}
	};
	$.fn.wsceditor_init = function(){
		$.each($.wscfg.editor._srcload, function(_k, o){
			/*!
			* 载入状态
			*/
			var cfg = {
				toolbars : o._editor.toolbar,
				//initialFrameWidth : "100%", 
				initialFrameWidth : o._editor.width, 
				initialFrameHeight : o._editor.height, 
				labelMap : $.wscfg.editor.lables, 
				filterRules : $.wscfg.editor.filters
			};
			/*!
			* 字符数
			*/
			if (!isNaN(o._max) && o._max > 0){
				cfg.wordCount = true;
				cfg.maximumWords = o._max;
			}
			/*!
			* 载入
			*/
			UE.getEditor(o.id, cfg);
		});
	};
	/*!
	* 路径
	*/
	$.fn.wsceditor_videosrc = function(s){
		
		if (s.match(/\.youku\.com/i)){
			s = s.replace(/\?(\S+)/, '');
		}
		
		return s.replace(/http:\/\/www\.tudou\.com\/programs\/view\/([\w\-]+)\/?/i,"http://www.tudou.com/v/$1")
		.replace(/http:\/\/www\.youtube\.com\/watch\?v=([\w\-]+)/i,"http://www.youtube.com/v/$1")
		.replace(/http:\/\/v\.youku\.com\/v_show\/id_([\w\-=]+)\.html/i,"http://player.youku.com/player.php/sid/$1/v.swf") //http://player.youku.com/player.php/sid/XNTcxOTA2ODQ4/v.swf
		.replace(/http:\/\/www\.56\.com\/u\d+\/v_([\w\-]+)\.html/i, "http://player.56.com/v_$1.swf")
		.replace(/http:\/\/www.56.com\/w\d+\/play_album\-aid\-\d+_vid\-([^.]+)\.html/i, "http://player.56.com/v_$1.swf")
		.replace(/http:\/\/v\.ku6\.com\/.+\/([^.]+)\.html/i, "http://player.ku6.com/refer/$1/v.swf");
	};
	/*!
	* 回调控制
	*/
	$.fn.extend({
		/*!
		* 参数
		* @param object o, 接受参数
		*               string type, 工具名
		*               object editor, 当前编辑器
		*               object utli, Editor-DOM-Utility
		*/
		wsceditor_call : function(o){
			var o = o || {}; switch (o.type){
				case 'wscimage' : $.fn.wsceditor_call_image(o); break;
				case 'wscvideo' : $.fn.wsceditor_call_video(o); break;
				case 'wscmusic' : $.fn.wsceditor_call_music(o); break;
				case 'wschider' : $.fn.wsceditor_call_hider(o); break;
				case 'wscemote' : $.fn.wsceditor_call_emote(o); break;
			}
		}, 
		wsceditor_pbox : function(o, htm, fn){
			/*!
			* 变量
			* @var object _edit, Editor-Container
			* @var object _wrap, Textarea-Wrap
			* @var object _elem, Popup-Box
			*/
			var _edit = $(o.editor.container), 
				_wrap = _edit.parent(), 
				_pbox = _wrap.find('[wsceditor-box="'+o.type+'"]');
			/*!
			* 首载
			*/
			if (_pbox.length == 0){
				/*!
				* 结构
				*/
				_wrap.prepend('<div wsceditor-box="'+o.type+'" class="edui-wsceditor-box wsc-ui-static"><div class="edui-wsceditor-boxwrap wsc-ui-static"><div wsceditor-box-icon class="edui-wsceditor-boxicon"></div><div wsceditor-box-html class="edui-wsceditor-boxhtml wsc-ui-static '+o.type+'"></div></div></div>');
				_pbox = _wrap.find('[wsceditor-box="'+o.type+'"]');
				/*!
				* 事件
				*/
				_pbox.data({
					/*!
					* 显示
					*/
					open : function(htm, fn){
						_pbox.find('[wsceditor-box-html]').html(htm);
						/*!
						* 位置
						*/
						var ico = _edit.find('.edui-for-'+o.type), 
							pos = ico.position();
						var mcs = {};
							mcs.top = pos.top;
							mcs.top += ico.outerHeight();
							mcs.top += 8;
							mcs.left = 0;
						var _ew = _edit.outerWidth(), 
							_pw = _pbox.outerWidth();
						if (_ew > _pw){
							mcs.left = _ew - _pw; 
							mcs.left /= 2;
							mcs.left = parseInt(mcs.left);
							/*!
							* ICON
							*/
							var _icon = _pbox.find('[wsceditor-box-icon]'), 
								_icss = {};
								_icss.top = _icon.outerHeight() - 1;
								_icss.top *= -1;
								_icss.left = pos.left - mcs.left;// - parseInt(ico.outerWidth()/2);
								_icss.left += parseInt(ico.outerWidth()/2)-3;
								_icon.css(_icss);
						}
						/*!
						* 文档
						*/
						_pbox.css(mcs).finish().show(50, function(){
							_pbox.css('overflow', 'inherit'); try{
								fn(_pbox);
							}catch(err){} _pbox.outclick(function(){
								_pbox.data('close')();
							});
						});
					}, 
					/*!
					* 隐藏
					*/
					close : function(){
						_pbox.css('display', 'none');
					}
				});
			}
			/*!
			* 显示
			*/
			try{
				_pbox.data('open')(htm, fn);
			}catch(err){}
		},
		/*!
		* 选项卡列表
		* @param array o, 参数
		*              object { // mixed
		*                  value : string,  // 选项标识
		*                  title : string,  // 选项名称
		*                  hover : boolean  // 激活状态
		*              }
		*/
		wsceditor_tpl_tab : function(o){
			var htm = '';
				htm += '<div class="tabs">';
					htm += '<ul>'; $(o).each(function(_k, _v){
						htm += '<li>';
							htm += '<a wsceditor-tab="'+(_v.value || '')+'" href="javascript:void(0)"'+(_v.hover ? ' class="hover"' : '')+'>';
								htm += _v.title;
							htm += '</a>';
						htm += '</li>'; });
					htm += '</ul><p></p>';
				htm += '</div>';
			return htm;
		}, 
		/*!
		* 选项卡内容
		* @param array o, 参数
		*              object { // mixed
		*                  value : string,  // 选项标识
		*                  content : string,  // 选项名称
		*                  hover : boolean  // 激活状态
		*              }
		*/
		wsceditor_tpl_tabody : function(o){
			var htm = ''; $(o).each(function(_k, _v){				
				htm += '<div wsceditor-tab-body="'+(_v.value || '')+'" '+(_v.hover ? '' : ' style="display:none"')+'>';
					htm += _v.content;
				htm += '</div>'; });
			return htm;
		},
		/*!
		* 选项卡事件
		*/
		wsceditor_tpl_tabevent : function(){
			var obj = $(this); obj.find('[wsceditor-tab]').unbind('click').click(function(){
				/*!
				* 变量
				* @var object tab, 当前选项
				* @var object dlg, 当前弹窗
				* @var string val, 选项索引
				* @var object sel, 选中主体
				*/
				var tab = $(this), 
					dlg = tab.parent().parent().parent().parent(), 
					val = tab.attr('wsceditor-tab'), 
					sel = null;
				if (val){
					sel = dlg.find('[wsceditor-tab-body="'+val+'"]');
				} if (sel && sel.length){
					dlg.find('[wsceditor-tab]').removeClass('hover'); tab.addClass('hover');
					dlg.find('[wsceditor-tab-body]').css('display', 'none'); sel.css('display', 'block');
				}
			});
		},
		/*!
		* 读取已选内容
		*/
		wsceditor_tpl_tabselected : function(){
			var obj = $(this), 
				res = {type : '', wrap : null}, 
				src = obj.find('[dialog-button-yes]').attr('dialog-src');
			/*!
			* 弹窗
			*/
			var dlg = $('[dialog-src-target="'+src+'"]'); if (dlg.length){
				var num = 0; dlg.find('[wsceditor-tab-body]').each(function(){
					var tmp = $(this); if (tmp.css('display') != 'none' && num == 0){
						num++; 
						res.type = tmp.attr('wsceditor-tab-body'); 
						res.wrap = tmp;
					}
				});
			} return res;
		},
		/*!
		* 初始化弹窗
		* @param object o, 当前配置[Editor]
		* @param string htm, 弹窗主内容区
		* @param function fn, 回调方法[点击"确定"按钮后]
		* @param function ar, After-Render
		*/
		wsceditor_dialog : function(o, htm, fn, ar){
			/*!
			* 建立Dialog
			*/
			var did = 'wsceditor-dialog-'+o.editor.uid+'-'+o.type, 
				obd = $('#'+did); if (obd.length > 0){
					var obds = obd.find('[dialog-src]').attr('dialog-src'); if (obds){
						$('[dialog-src-target="'+obds+'"]').remove();
						$('[dialog-src-masker="'+obds+'"]').remove();
					} obd.remove();
				}
			/*!
			* HTML文档
			*/
			var dhtm = '<div id="'+did+'" style="display:none">';
					dhtm += '<a dialog dialog-title="'+$.wscfg.editor.lables[o.type]+'" dialog-width="500" dialog-button="yes,no" dialog-button-yes="'+$.wscfg.editor.lables[o.type]+'" dialog-selector="#'+did+'-handle" dialog-no-masker="true" dialog-src="wscore-editor-dialog" dialog-extension-handle></a>';
					dhtm += '<div id="'+did+'-handle">';
						dhtm += '<div class="edui-wsceditor-dialog wsc-ui-static '+o.type+'">'+htm+'</div>';
					dhtm += '</div>';
				dhtm += '</div>'; $('body').append(dhtm); obd = $('#'+did); 
			/*!
			* 数据初始化
			*/
			if (obd.length){
				obd.wscload().find('[dialog-button-yes]').removeData('dialog-button-yes').data('dialog-button-yes', function(){
					try{
						fn(obd);
					}catch(err){}
				});
				/*!
				* 事件
				*/
				try{
					ar(obd);
				}catch(err){}
				/*!
				* 点击
				*/
				obd.find('[dialog-extension-handle]').click();
			}
		},
		wsceditor_call_image : function(o){
			var htm = '<input type="file" name="filter_file" filter-ajax="'+$.wscfg.upload.stream.eimage()+'" filter-icon="image" />'; $.fn.wsceditor_dialog(o, htm, function(sel){
				var _dlg = sel.find('[dialog-button-yes]').attr('dialog-src'); if (_dlg){
					var _pop = $('[dialog-src-target="'+_dlg+'"]'); if (_pop.length == 1){
						var res = ''; _pop.find('[wscore-upload-item]').each(function(){
							var _tmp = $(this), 
								_img = _tmp.find('img[upload-sort-src]'); if (_img.length){
									var _src = _img.attr('src'); if (_src){
										var _small = $.fn.imgsize(_src, $.wscfg.editor.imagesize.width, $.wscfg.editor.imagesize.height), 
											_large = $.fn.imgsize(_src, 0, 0), 
											_title = _tmp.find('input[upload-sort-text]').val() || '';
										res += '<center>';
										res += '<img wscimage="true" src="'+_small+'" _src="'+_large+'" alt="'+_title+'" />';
										res += '</center>';
									}
								} 
						}); if (res != ''){
							o.editor.execCommand('insertHtml', res);
						} _pop.find('[wscore-upload-item]').remove();
					}
				}
			});
		},
		wsceditor_call_video : function(o){
			/*!
			* 表单
			*/
			var htm = '';
			/*!
			* 选项
			*/
			htm += $.fn.wsceditor_tpl_tab([
				{value : 'upload', title : '视频上传', hover : true}, 
				{value : 'website', title : '网络视频'}
			]);
			/*!
			* 主体
			*/
			htm += $.fn.wsceditor_tpl_tabody([{
					value : 'upload', 
					content : '<div class="edui-wscvideo-upload"><input type="file" name="filter_file_videoupload" filter-max="1" filter-ajax="'+$.wscfg.upload.stream.video+'" filter-icon="video" /></div>', 
					hover : true
				}, {
					value : 'website', 
					content : '<div class="edui-wscvideo-website"><p>请输入网址 <span>( 支持 <a href="http://www.wudao.com" target="_blank">中舞网</a>、<a href="http://www.youku.com" target="_blank">优酷</a>、<a href="http://www.tudou.com" target="_blank">土豆</a> 等 )</span></p><div class="br"></div><input type="url" name="filter_file_videowebsite" placeholder="http://www.youku.com/" /></div>'
				}
			]);
			/*!
			* 初始弹窗
			*/
			$.fn.wsceditor_dialog(o, htm, 
				/*!
				* 点击确认按钮
				* @note after-button
				*/
				function(sel){
					var src = '', err = false, 
						obj = sel.wsceditor_tpl_tabselected(); if (!obj.type || !obj.wrap){return false;}
					/*!
					* 读取视频
					*/
					if (obj.type == 'website'){
						var url = obj.wrap.find('input[name="filter_file_videowebsite"]').val(); if (url){
							url = $.fn.wsceditor_videosrc(url); if (url){
								src = url; obj.wrap.find('input[name="filter_file_videowebsite"]').val('');
							} else {
								err = true;
							}
						}
					}
					/*!
					* 上传视频
					*/
					else if (obj.type == 'upload') {
						obj.wrap.find('[wscore-upload-success]').each(function(){
							var key = $(this).attr('wscore-upload-success'); if (key){
								src = $.wscfg.editor.uploadsrc.editorvideo+key;
							}
						});
					}
					/*!
					* 插入视频
					*/
					if (src != ''){
						var htm = '<p>';
								htm += '<embed wscvideo="true" allowFullScreen="true" quality="high" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" ';
								htm += 'width="'+$.wscfg.editor.videosize.width+'" ';
								htm += 'height="'+$.wscfg.editor.videosize.height+'" ';
								htm += 'src="'+src+'">';
								htm += '</embed>';
							htm += '</p>'; o.editor.execCommand('insertHtml', htm);
					}
					/*!
					* 视频报错
					*/
					if (err){
						alert('插入视频失败');
					}
				},
				/*!
				* 模板渲染之后注册事件
				* @note after-render
				* @param object sel, 当前弹窗
				*/
				function(sel){
					sel.wsceditor_tpl_tabevent();
				}
			);
		},
		wsceditor_call_music : function(o){
			/*!
			* 表单
			*/
			var htm = '';
			/*!
			* 选项
			*/
			htm += $.fn.wsceditor_tpl_tab([
				{value : 'upload', title : '音乐上传', hover : true}, 
				{value : 'website', title : '网络音乐'}
			]);
			/*!
			* 主体
			*/
			htm += $.fn.wsceditor_tpl_tabody([{
					value : 'upload', 
					content : '<div class="edui-wscmusic-upload"><input type="file" name="filter_file_musicupload" filter-max="1" filter-ajax="'+$.wscfg.upload.stream.music+'" filter-icon="music" /></div>', 
					hover : true
				}, {
					value : 'website', 
					content : '<div class="edui-wscmusic-website"><p>请输入网址</p><div class="br"></div><input type="url" name="filter_file_musicwebsite" placeholder="http://www.baidu.com" /></div>'
				}
			]);
			/*!
			* 初始弹窗
			*/
			$.fn.wsceditor_dialog(o, htm, 
				/*!
				* 点击确认按钮
				* @note after-button
				*/
				function(sel){
					var src = '', err = false, 
						obj = sel.wsceditor_tpl_tabselected(); if (!obj.type || !obj.wrap){return false;}
					/*!
					* 读取音乐
					*/
					if (obj.type == 'website'){
						var url = obj.wrap.find('input[name="filter_file_musicwebsite"]').val(); if (url){
							url = $.fn.wsceditor_videosrc(url); if (url){
								src = url; obj.wrap.find('input[name="filter_file_musicwebsite"]').val('');
								
							} else {
								err = true;
							}
						}
					}
					/*!
					* 上传音乐
					*/
					else if (obj.type == 'upload') {
						obj.wrap.find('[wscore-upload-success]').each(function(){
							// if (src == ''){
								var key = $(this).attr('wscore-upload-success'); if (key){
									src = $.wscfg.editor.uploadsrc.editormusic+key;
								}
							// }
						});
					}
					/*!
					* 插入音乐
					*/
					if (src != ''){
						src = $.fn.urlencode(src); var cfg = {
							'autostart' : 'yes',
							'bg' : '0xCDDFF3',
							'leftbg' : '0x357DCE',
							'lefticon' : '0xF2F2F2',
							'rightbg' : '0xF06A51',
							'rightbghover' : '0xAF2910',
							'righticon' : '0xF2F2F2',
							'righticonhover' : '0xFFFFFF',
							'text' : '0x357DCE',
							'slider' : '0x357DCE',
							'track' : '0xFFFFFF',
							'border' : '0xFFFFFF',
							'loader' : '0xAF2910',
							'soundFile' : src
						}, 
						htm = '', str = comma = ''; $.each(cfg, function(k, v){str += comma; comma = '&amp;';str += k+'='+v;});
						htm += '<p>';
						htm += '<object wscmusic="true" height="'+$.wscfg.editor.musicsize.height+'" width="'+$.wscfg.editor.musicsize.width+'" data="http://s001.wudao.com/t1/player.swf" type="application/x-shockwave-flash">';
						htm += '<param value="http://s001.wudao.com/t1/player.swf" name="movie">';
						htm += '<param value="'+str+'" name="FlashVars">';
						htm += '<param value="high" name="quality">';
						htm += '<param value="false" name="menu">';
						htm += '<param value="#FFFFFF" name="bgcolor">';
						htm += '</object>'; 
						htm += '<p>'; o.editor.execCommand('insertHtml', htm);
					}
					/*!
					* 音乐报错
					*/
					if (err){
						alert('插入音乐失败');
					}
				}, 
				/*!
				* 模板渲染之后注册事件
				* @note after-render
				*/
				function(sel){
					sel.wsceditor_tpl_tabevent();
				}
			);
		},
		/*!
		* 网络数据
		* @method wsceditor_call_emote, 表情图标
		* @method wsceditor_call_hider, 数据隐藏
		*/
		wsceditor_call_emote : function(o){
			/*!
			* HTML
			*/
			var ico = [
					'微笑', '亲吻', '调皮', '惊讶', '耍酷', 
					'发火', '害羞', '汗水', '大哭', '得意', 
					'鄙视', '困', '夸奖', '晕倒', '疑问', 
					'媒婆', '狂吐', '青蛙', '发愁', '亲吻', 
					'', '爱心', '心碎', '玫瑰', '礼物', 
					'哭', '奸笑', '可爱', '得意', '呲牙', 
					'暴汗', '楚楚可怜', '困', '哭', '生气', 
					'惊讶', '口水', '彩虹', '夜空', '太阳', 
					'钱钱', '灯泡', '咖啡', '蛋糕', '音乐', 
					'爱', '胜利', '赞', '鄙视', 'OK'
				],
				htm = '<ul>'; for (var i = 1; i <= 50; i++){
				htm += '<li><a href="javascript:void(0)"><img wscemote="true" title="'+ico[(i-1)]+'" src="http://img.baidu.com/hi/face/i_f'+(i < 10 ? '0' : '')+i+'.gif" border="0" /></a></li>'; }
				htm += '</ul>';
			$.fn.wsceditor_pbox(o, htm, function(_pbox){
				_pbox.find('img[wscemote]').unbind('click').click(function(e){
					var tmp = $(this), 
						src = tmp.attr('src'), 
						alt = tmp.attr('title') || tmp.attr('alt') || '';
					if (src){
						o.editor.execCommand('insertHtml', '<img wscemote="true" alt="'+alt+'" src="'+src+'" />'); if (!e.ctrlKey){
							_pbox.outclick();
						}
					}
				});
			});
		},
		wsceditor_call_hider : function(o){
			/*!
			* 状态
			*/
			var _selection = o.editor.selection, _status = function(){
				var _nodes = _selection.getStartElementPath(), 
					_noder = o.utli.filterNodeList(_nodes, 'p div');
				if (_noder){
					var _elem = $(_noder), 
						_hider = _elem.attr('wschider') === 'true';
					if (_hider){
						return _noder;
					}
				};
			}, _query = function(){
				var _hider = false, 
					_elem = _status(); 
				if (_elem){
					_hider = true;
				}
				/*!
				* 清除
				*/
				if (_hider){
					o.utli.removeAttributes(_elem, 'wschider');
				}
				/*!
				* 设置
				*/
				else {
					var run = function(){o.editor.execCommand('Paragraph', 'p', {'wschider' : 'true'});}, 
						runer = false, 
						runcookie = 'wscore_editor_hider'; 
					if ($.wscfg.editor.lables.wschider_days > 0){
						var runcooked = $.fn.setcookie(runcookie); if (runcooked[runcookie]){
							run();
							return true;
						}
					}
					/*!
					* 带提醒
					*/			
					$.fn.wscalert({
						text : $.wscfg.editor.lang.wschider, type : 'info', call : function(){
							run(); 
							/*!
							* 带记忆
							*/			
							if ($.wscfg.editor.lables.wschider_days > 0){
								$.fn.setcookie(runcookie, 1, $.wscfg.editor.lables.wschider_days);
							}
						}
					});
				}
			}; _query();
		}
	});
	/*!
	* 兼容模式
	*/
	$.fn.extend({
		umimage : function(o){
			$.fn.wscupload(o);
		}
	});
})(jQuery);

/*! @source "js/plugins/events.js" */

/*!
* 功能事件
*/
(function($){
	$.extend($.wscfg, {
		mousestop : {}, 
		/*!
		* 外点击配置
		*/
		outclick : {
			selor : 'html', 			// 全局元素
			attrs : 'html-outclick', 	// 外点标识
			handle : null, 				// 上次句柄
			callback : null				// 上次回调
		}
	});
	/*!
	* 鼠标在某元素上停止
	*/
	$.fn.mousestop = function(fn){};
	/*!
	* 鼠标在某元外点击
	*/
	$.fn.outclick = function(fn){
		/*!
		* 清除
		*/
		if ($.wscfg.outclick.callback != null){
			$.wscfg.outclick.callback($.wscfg.outclick.handle);
			$.wscfg.outclick.callback = null;
		} if ($.wscfg.outclick.handle != null){
			$.wscfg.outclick.handle = null;
		}
		/*!
		* 重置
		*/
		$($.wscfg.outclick.selor).unbind('click');
		/**
		* 设置
		*/
		if ($.type(fn) == 'function'){
			$.wscfg.outclick.handle = $(this);
			$.wscfg.outclick.handle.attr($.wscfg.outclick.attrs, true);
			$.wscfg.outclick.callback = fn;
			$($.wscfg.outclick.selor).click(function(e){
				var obj = $(e.target), 
					call = true;
				for (var i = 0; i < 10; i++){
					/*!
					* 标签结束
					*/
					var node = obj.get(0).nodeName.toString().toLowerCase(); if (node == 'body' || node == 'html'){
						break;
					}
					/*!
					* 范围内容
					*/
					if (obj.attr($.wscfg.outclick.attrs)){
						call = false;
						break;
					}
					/*!
					* 向上一级
					*/
					obj = obj.parent();
				}
				/*!
				* 执行回调
				*/
				if (call){
					$.wscfg.outclick.handle.attr($.wscfg.outclick.attrs, null).outclick();
				}
			});
		}
	};
})(jQuery);

/*! @source "js/plugins/function.js" */

/*!
* 公共方法
*/
(function($){
	/*!
	* 全角转半角
	*/
	$.fn.full2half = function(v, _t, _a){
		/**
		* @param string v, 原字符串
		* @param boolean _t, 是否去除前后空白
		* @param boolean _a, 是否去除全部空白
		*/
		var res = ''; $(v.toString().split('')).each(function(i, v){
			var c = v.charCodeAt(0); if (c == 12288){
				res += ' ';
			} else if (c >= 60000 && c <= 65535){
				if (c >=65281 && c <= 65381){
					c -= 65248;
					res += String.fromCharCode(c);
				}
			} else {
				res += v;
			}
		}); if ((_t || _a) && $.type(res) == 'string'){
			if (_a){
				res = res.replace(/ /g, '');
			} else {
				res = $.trim(res);
			}
		} return res;
	};
	/*!
	* 图片地址
	* @example $.fn.imgsize('IMGSRC', 100, 0);
	* @example $.fn.imgsize('IMGSRC', 100, 60);
	* @example $.fn.imgsize('IMGSRC', 0, 60);
	*/
	$.fn.imgsize = function(s, w, h){
		var o = {}; if (s){
			o = $.fn.urlobj(s); }
		/*!
		* 路径
		*/
		if (o.host == ''){
			return s;
		}
		/*!
		* 比例
		*/
		if ($.type(w) != 'undefined' && w.toString().match(/^([0-9]+)$/)){
			w = parseInt(w);
		} else {
			w = 0;
		} if ($.type(h) != 'undefined' && h.toString().match(/^([0-9]+)$/)){
			h = parseInt(h);
		} else {
			h = 0;
		} if (w == 0 && h == 0){
			// return s;
		}
		/*!
		* 筛选
		*/
		var m = /^http([s]*):\/\/([_a-z0-9\-]+)\.([_a-z0-9\-\.]+)\//i.exec(s) || []; if (m.length > 0){
			var r = '';
			/*!
			* 兼容
			*/
			if ($.inArray(m[2], ['s', 'f001', 's001', 'img01']) != -1){
				r += o.protocol + '//' + $.wscfg.core.imgdomain + '.' +$.wscfg.core.subdomain;
				r += '/' + w;
				r += '/' + h;
				r += m[2] === 's' ? o.pathname.replace(/\/upload\//i, '/') : o.pathname;
			}
			/*!
			* 调整
			*/
			else if (m[2] == $.wscfg.core.imgdomain){
				if (o.pathname.substr(0, 1) === '/'){
					o.pathname = o.pathname.substr(1, o.pathname.length-1);
				} var p = o.pathname.split('/'), 
					a = b = []; if (p[0].match(/^([0-9]+)$/)){
					a = p.slice(2);
				} else {
					a = p.slice(3);
					b.push(p[0])
				} b.push(w, h); var n = b.concat(a); r += o.protocol + '//' + o.host + '/' +n.join('/');
			}
			/*!
			* 路径
			*/
			else {
				r = s;
			} return r;
		} return s;
	};
	/*!
	* URL跳转
	*/
	$.fn.redirect = function(s){
		/*!
		* 跳转URL
		*/
		if ($.type(s) != 'string'){
			s = window.location.href;
		}
		/*!
		* 格式化
		*/
		s = s.replace(/&amp;/ig, '&').replace(/#(\S*)/, ''); if (s){	
			window.location.href = s;
		} else {
			window.location.reload();
		}
	};
	/*!
	* 设置Cookie
	*/
	$.fn.setcookie = function(){
		var _arg = arguments; 
		/*!
		* 读取全部(指定)
		*/
		if (_arg.length <= 1){
			var _name = [], 
				_cook = document.cookie, 
				_result = {};
			/*!
			* 空Cookie时
			*/
			if (_cook && $.type(_cook) == 'string'){
				_cook = _cook.replace(/ /g, '');
			} if (_cook == ''){
				return _result;
			}
			/*!
			* Cookie范围
			*/
			if (_arg.length == 1 && $.type(_arg[0]) == 'string'){
				_arg[0] = _arg[0].replace(/ /g, ''); $(_arg[0].split(',')).each(function(_k, _v){
					if ($.type(_v) == 'string' && _v.toString().match(/^([_a-z0-9\-]+)$/i)){
						_name.push(_v);
					}
				});
			}
			/*!
			* Cookie遍历
			*/
			$(_cook.split(';')).each(function(_k, _v){
				var _s = _v.toString().split('='), 
					_a = true; 
				if (_s.length >= 2){
					if (_arg.length == 1 && $.inArray(_s[0], _name) == -1){
						_a = false;
					} if (_a){
						_result[_s[0]] = unescape(_s[1]);
					}
				}
			});
			/*!
			* 返回结果
			*/
			return _result;
		}
		/*!
		* 名称合法性检查
		*/
		if ($.type(_arg[0]) != 'string' || !_arg[0].match(/([_a-z0-9\-]+)/i)){
			return false;
		}
		/*!
		* 删除Cookie控制
		*/
		if ($.type(_arg[1]) == 'boolean'){
			var _exi = $.fn.setcookie(_arg[0]);
			/*!
			* 不存在
			*/
			if ($.type(_exi[_arg[0]]) == 'undefined'){
				return true;
			}
			/*!
			* 重置
			*/
			_arg[1] = '';
			_arg[2] = -1;
		} else {
			_arg[1] = _arg[1].toString();
		}
		/*!
		* 默认项
		*/
		var _day = 0, 
			_path = '/', 
			_domain = $.wscfg.core.domain;
		/*!
		* 天数
		*/
		if ($.type(_arg[2]) == 'number'){
			_arg[2] = _arg[2].toString(); if (_arg[2].match(/^([\-]*)([0-9]+)$/)){
				_day = parseInt(_arg[2]);
			}
		}
		/*!
		* 路径
		*/
		if (_arg.length >= 4){
			_arg[3] = _arg[3].toString(); if (_arg[3] == '' || _arg[3].match(/^([_a-z0-9\-\/]+)$/i)){
				_path = _arg[3];
			}
		}
		/*!
		* 域名
		*/
		if (_arg.length >= 5){
			_arg[4] = _arg[4].toString(); if (_arg[4] == '' || _arg[4].match(/^([_a-z0-9\.\-]+)$/i)){
				_domain = _arg[4];
			}
		}
		/*!
		* 期限
		*/
		var _expire = ''; if (_day > 0){
			var _expirer = new Date($.today.getTime() + _day * 86400 * 1000);
				_expire = _expirer.toGMTString();
		} else if (_day < 0) {
			_expire = 'Thu, 01-Jan-1970 00:00:00 GMT';
		}
		/*!
		* 执行
		*/
		var _cookie  = _arg[0]+'='+escape(_arg[1]); if (_expire != ''){
			_cookie += '; expires=' + _expire; } if (_path != ''){
			_cookie += '; path=' + _path; } if (_domain != ''){
			_cookie += '; domain=' + _domain; } document.cookie = _cookie;
		return true;
	};
	/*!
	* 计算字符长度
	*/
	$.fn.strlen = function(x, z){
		/*!
		* 接受参数
		* @param string x, 原字符串内容
		* @param int z, 一个中文所占字符数(默认: 自动)
		*/
		var i = 0; if (z && $.type(z) == 'number'){
			z = parseInt(z); } else {
			z = $.wscfg.core.charset == 'utf-8' ? 3 : 2; }
		/*!
		* 返回统计
		*/
		$(x.toString().split('')).each(function(){
			var n = 1, c = this; if (c.match(/^([\u4e00-\u9fa5]+)$/)){
				n = z;
			} i += n;
		}); return i;
	};
	/*!
	* URL标准解析
	*/
	$.fn.urldecode = function(s){
		s = s.replace(/%3A/ig, ':');
		s = s.replace(/%2F/ig, '/');
		s = s.replace(/%3F/ig, '?');
		s = s.replace(/%3D/ig, '=');
		s = s.replace(/%23/g, '#');
		s = s.replace(/%26/g, '&');
		s = s.replace(/\+/g, ' ');
		return s;
	};
	$.fn.urlencode = function(s){
		s = s.replace(/:/g, '%3A');
		s = s.replace(/\//g, '%2F');
		s = s.replace(/\?/g, '%3F');
		s = s.replace(/=/g, '%3D');
		s = s.replace(/#/g, '%23');
		s = s.replace(/&/g, '%26');
		s = s.replace(/ /g, '+');
		return s;
	};
	$.fn.urlobj = function(u) {
		u = u.toString().replace(/&amp;/ig, '&');
		/**
		* @var string e, 正则匹配规则
		* @var array m, 匹配结果
		* @var object s, 返回格式化
		*/
		var e = /^\s*(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/, m = e.exec(u) || [], s = {
				href : '',
				hrefNoHash : '',
				hrefNoSearch : '',
				domain : '',
				protocol : '',
				doubleSlash : '',
				authority : '',
				username : '',
				password : '',
				host : '',
				hostname : '',
				port : '',
				pathname : '',
				directory : '',
				filename : '',
				search : '',
				hash : '', 
				cross : ''
			};
		/**
		* ArrayObject 转PlainObject
		*/
		$(m).each(function(i, v) {
			if (v) {
				switch (i) {
					case 0 : s.href = v; break;
					case 1 : s.hrefNoHash = v; break;
					case 2 : s.hrefNoSearch = v; break;
					case 3 : s.domain = v; break;
					case 4 : s.protocol = v; break;
					case 5 : s.doubleSlash = v; break;
					case 6 : s.authority = v; break;
					case 8 : s.username = v; break;
					case 9 : s.password = v; break;
					case 10 : s.host = v; break;
					case 11 : s.hostname = v; break;
					case 12 : s.port = v; break;
					case 13 : s.pathname = v; break;
					case 14 : s.directory = v; break;
					case 15 : s.filename = v; break;
					case 16 : s.search = v; break;
					case 17 : s.hash = v; break;
				}
			}
		});
		/*!
		* 跨域计算
		*/
		if (s.host && s.host.toString().toLowerCase() != window.location.host.toString().toLowerCase()){
			s.cross = $.fn.urlencode(s.href);
			s.cross = $.wscfg.core.proxy + s.cross;
		}
		/**
		 * 返回Object对象
		 */
		return s;
	};
})(jQuery);

/*! @source "js/plugins/sortable.js" */

/*!
* 拖拽排序
*/
(function($){
	$.wscfg.sortable = $.wscfg.sortable || {}; $.extend($.wscfg.sortable, {
		title : '拖拽排序', 
		origin : {}, 
		point : {},
		moused : {}, 
		params : {}
	});
	/*!
	* 初始化
	* @param object, 接受参数
	*        string handle, 句柄
	*        string placeholder, 占位
	*        function start, 开始前
	*        function stop, 结束后
	*/
	$.fn.sortable = function(o){
		var obj = $(this);
		/*!
		* 组存在
		*/
		if (obj.length == 0){
			return;
		}
		/*!
		* 
		*/
		var o = o || {};
			o = $.fn.sortable_param(o);
		obj.each(function(){
			$(this).sortable_init(o);
		});
	};
	/*!
	* 排序工具
	*/
	$.fn.extend({
		sortable_init : function(o){
			var num = 0; o.obj = $(this); o.obj.find('> *').each(function(){
				var item = $(this); if (item.attr('sortable-ignore') != 'true'){
					var handle = item; if (o.handle){
						var _handle = item.find(o.handle); if (_handle.length > 0){
							handle = _handle;
						}
					} item.attr('sortable-item', num).hover(
						function(){
							$(this).addClass('sortwait')
						}, 
						function(){
							$(this).removeClass('sortwait')
						}
					); num++; handle.css('cursor', 'move').unbind('mousedown').bind('mousedown', function(e){
						e.preventDefault(); item.sortable_event_mousedown(e, o);
					});
				}
			});
		}, 
		/*!
		* selector
		*/
		sortable_event_start : function(e, o){
			var item = $(this);
			/*!
			* 回调
			*/
			if ($.type(o.start) === 'function'){
				o.start(item, o, e);
			}
			/*!
			* 缓存
			*/
			$.wscfg.sortable.point = item.position();
			$.wscfg.sortable.moused = {clientX : e.clientX, clientY : e.clientY};
			$.wscfg.sortable.origin['class'] = item.attr('class') || '';
			$.wscfg.sortable.origin['style'] = item.attr('style') || '';
			/*!
			* 可拓拽样式
			*/
			var icss = $.wscfg.sortable.point, z = item.attr('z-index');
				icss.position = 'absolute';
				icss.zIndex = 1000; if (z && z.toString().match(/^([0-9]+)$/)){icss.zIndex += parseInt(z)}
				icss.opacity = .5;
			/*!
			* 占位符
			*/
			var node = item.get(0).nodeName.toLowerCase();
			var placeholder = '<'+node+' sortable-placeholder="true" class="'+(o.placeholder || '')+'" style="background-color:#ffc" />';
				$(placeholder).insertBefore(item.css(icss).addClass('sorting').attr('sortable-hover', true));
			/*!
			* 格式化
			* @var string current, 当前Item(c[0-9]+)
			* @var string target, 目标Item(t[0-9]+)
			* @var string direction, 方向[l|r]
			*/
			$.wscfg.sortable.params = {current : 'c'+item.attr('sortable-item'), target : '', direction : 'l'};
			item.sortable_event_points(e, o);
		},
		sortable_event_stop : function(e, o){
			var item = $(this);
			/*!
			* 应用排序前样式
			*/
			o.obj.find('[sortable-placeholder]').remove();
			item.attr({'class' : $.wscfg.sortable.origin['class'], 'style' : $.wscfg.sortable.origin['style'], 'sortable-hover' : null});
			$.wscfg.sortable.origin = {};
			/*!
			* 回调
			*/
			if ($.type(o.stop) === 'function'){
				o.stop(item, o, e);
			}
		},
		sortable_event_point : function(){
			var tmp = $(this), 
				pos = tmp.position();
				pos.xx = pos.left + tmp.outerWidth();
				pos.yy = pos.top + tmp.outerHeight();
				pos.item = tmp;
				pos.num = tmp.attr('sortable-item');
			return pos;
		},
		sortable_event_points : function(e, o){
			$.wscfg.sortable.params.points = []; o.obj.find('[sortable-item]').each(function(){
				var tmp = $(this), 
					hov = tmp.attr('sortable-hover');
				if ($.type(hov) === 'undefined'){
					$.wscfg.sortable.params.points.push(tmp.sortable_event_point());
				}
			});
		},
		sortable_event_mousedown : function(e, o){
			/*!
			* 注册事件
			*/
			var item = $(this), binds = {
				'mousemove' : function(e, o){
					item.sortable_event_mousemove(e, o);
				}, 'mouseup' : function(e, o){
					item.sortable_event_mouseup(e, o);
				}
			}; $.each(binds, function(_k, _f){
				$(document).unbind(_k).bind(_k, function(e){
					e.preventDefault(); _f(e, o);
				});
			}); item.sortable_event_start(e, o);
		}, 
		sortable_event_mouseup : function(e, o){
			var item = $(this);
			/*!
			* 清除事件
			*/
			$(['mousemove', 'mouseup']).each(function(_i, _k){
				$(document).unbind(_k);
			}); item.sortable_event_stop(e, o);
		}, 
		sortable_event_mousemove : function(e, o){
			/*!
			* 位置变更
			*/
			var x = e.clientX - $.wscfg.sortable.moused.clientX, 
				y = e.clientY - $.wscfg.sortable.moused.clientY;
			var i = $(this), 
				p = {};
				p.top = $.wscfg.sortable.point.top; p.top += y;
				p.left = $.wscfg.sortable.point.left; p.left += x;
				i.css(p);
			/*!
			* 元素变更
			*/
			var pc = i.sortable_event_point(), 
				pt = null, 
				_sort = false, 
				_last = $.wscfg.sortable.params.current + $.wscfg.sortable.params.target + $.wscfg.sortable.params.direction, 
				_target = '', 
				_direction = ''; 
			$($.wscfg.sortable.params.points).each(function(k, v){
				if (!_sort){
					if ((pc.left > v.left && pc.left < v.xx) || (pc.xx > v.left && pc.xx < v.xx)){
						if ((pc.top > v.top && pc.top < v.yy) || (pc.yy > v.top && pc.yy < v.yy)){
							_sort = true; pt = v.item; _target = 't'+v.num; if (pc.left < v.left){
								_direction = 'r';
							} else {
								_direction = 'l';
							}
						}
					}
				}
			});
			/*!
			* 排序状态
			*/
			if (_sort){
				var _compare = $.wscfg.sortable.params.current + _target + _direction; if (_compare != _last){
					$.wscfg.sortable.params.target = _target;
					$.wscfg.sortable.params.direction = _direction;
					/*!
					* 变更
					*/
					var placeholder = o.obj.find('[sortable-placeholder]'); if (_direction == 'l'){
						i.insertBefore(pt);
						placeholder.insertBefore(pt);
					} else {
						i.insertAfter(pt);
						placeholder.insertAfter(pt);
					}
				}
			}
		}, 
		/*!
		* 参数格式化
		* @param object o, 接受参数
		*        string item, 元素选择器
		*        string handle, 拖拽句柄
		*/
		sortable_param : function(o){
			return o;
		}
	});
})(jQuery);

/*! @source "js/plugins/upload.js" */

/*!
* 用户文件上传
*/
(function($){
	/*!
	* 上传配置
	*/
	$.wscfg.upload = $.wscfg.upload || {}; $.extend($.wscfg.upload, {
		file_uuid : 0,
		file_speed : 350, 
		file_autoremove : 5000, 
		file_second : 1000, // 每隔1000毫秒[读取上传状态]
		file_inits : 0, 
		file_items : 0, 
		file_items_drop : '删除', 
		file_items_sortable : '拖拽排序', 
		//file_items_progress : '上传中...<br /><span item-progress>0%</span>',
		file_items_progress : '上传中...',
		file_items_placeholder : '请简要描述', 
		file_items_maximum : '超过最大允可数量', 
		file_form_wrap : 'wscore-upload-forms', 
		stream : {
			file : 'http://upload.wudaotv.com/api/stream.php',
			video : 'http://upload.wudaotv.com/api/stream.php',
			music : 'http://upload.wudaotv.com/api/stream.php', 
			image : 'http://uploadimg.wudaotv.com/index.php', 
			/**
			* 编辑器图片
			*/
			eimage : function(){
				var domain = $.wscfg.core.subdomain; if (domain.match(/([a-z])\.wudao.com$/i)){
					domain = domain.replace(/^star\./, '');
					return 'http://'+$.wscfg.core.imgdomain+'.'+domain+'/index.php';
				} else {
					return $.wscfg.upload.stream.image;
				}
			}
		},
		error : {
			file_unselect : '未选择文件', 
			file_selected : '文件已选中',
			type_denied : '不支持格式', 
			post_fail : '上传失败, 请稍候再试...'
		},
		extensions : {
			image : 'jpg,gif,png', 
			video : 'mpg,mpeg,avi,rm,rmvb,mov,asf,wmv,mp4,flv,f4v', 
			music : 'au,mp3,wma,midi,ra,ram'
		}
	});
	/*!
	* 上传返回
	* @note 上传POST到服务器之后返回结果
	* @return object o, 返回[$.isPlainObject]
	*         int uuid, 唯一编号
	*         int item, 错误编号
	*         int image, 
	*         int width,
	*         int height, 
	*         string src, 
	*         int errno, 错误编号
	*         string error, 错误原因
	*/
	$.fn.wscupload = function(o){
		var o = $.isPlainObject(o) ? o : {}; $.wscfg.upload.file_uuid++;
			o.uuid = o.uuid || $.wscfg.upload.file_uuid;
			o.item = o.item || 0;
		/*!
		* 索引
		*/
		var _item = $('[wscore-upload-item="'+o.item+'"]');
		/*!
		* 删除表单
		*/
		var _form = $('[wscore-upload-form="'+o.item+'"]'); if (_form.length > 0){
			_form.remove(); }
		/*!
		* 条目
		*/
		if (_item.length != 1){
			$.fn.wscalert(o.error || $.wscfg.upload.error.post_fail);
			return false;
		}
		/*!
		* 错误检查
		*/
		o.errno = o.errno ? parseInt(o.errno) : 0;
		o.error = o.errno ? (o.error || $.wscfg.upload.error.post_fail) : '&#160;';
		/*!
		* 如果出错
		*/
		if (!isNaN(o.errno) && o.errno > 0){
			_item.wscupload_setfail(o);
			return true;
		}
		/*!
		* 完成
		*/
		_item.wscupload_setdone(o);
	};
	/*!
	* 上传控件
	* @note 上传控件样式
	*/
	$.fn.wscupload_ui = function(o){
		/*!
		* 内容更新
		*/
		var htm = '', elem = 'filebase';
		/*!
		* 异步AJAX
		*/
		if (o._files['filter-ajax']){
			htm += '<label for="'+o.id+'" class="wsc-form-fileajax inline">';
				htm += '<div class="icon inline '+o._files['filter-icon']+'"></div>';
				htm += '<div class="text inline">'+o._files['filter-lang']+'</div>';
			htm += '</label>';
			elem = 'fileajax';
		}
		/*!
		* 普通File
		*/
		else {
			htm += '<label for="'+o.id+'" class="wsc-form-filebase inline">';
				htm += '<span class="icon inline"></span>';
				htm += '<span class="text inline">'+o._files['filter-lang']+'</span>';
			htm += '</label>';
		} 
		/*!
		* 接受格式
		*/
		var accept = $.fn.wscupload_accept(o._files['filter-icon'], o._files['filter-type']); if (accept){
			o.elem.attr('accept', accept);
		} o.elem.addClass('wsc-form-elem-'+elem).parent().append(htm);
	};
	$.fn.wscupload_accept = function(icon, type){
		var type = type || $.wscfg.upload.extensions[icon], 
			accept = comma = ''; 
		if (type){
			$(type.split(',')).each(function(k, v){
				var sets = ''; switch (v){
					/*!
					* 图片
					*/
					case 'png' : 
					case 'gif' : sets = 'image/'+v; break;
					case 'jpg' : 
					case 'jpeg' : 
					case 'pjpeg' : sets = 'image/jpeg'; break;
					/*!
					* 音乐
					*/
					case 'au' : sets = 'audio/basic'; break;
					case 'wma' : 
					case 'mp3' : sets = 'audio/x-aiff,audio/mpeg'; break;
					case 'midi' : sets = 'audio/midi,audio/x-midi'; break;
					case 'ra' : 
					case 'ram' : sets = 'audio/x-pn-realaudio'; break;
					/*!
					* 视频
					* video : 'mpg,mpeg,avi,rm,rmvb,mov,asf,wmv,mp4,flv,f4v', 
					*/
					case 'mpg' : 
					case 'mpeg' : sets = 'video/mpeg'; break;
					case 'avi' : sets = 'video/x-msvideo'; break;
					case 'rm' : 
					case 'rmvb' : sets = 'audio/x-pn-realaudio'; break;
					case 'mov' : sets = 'video/quicktime'; break;
					case 'f4v' : sets = 'video/f4v'; break;
					case 'flv' : sets = 'application/x-director,application/x-shockwave-flash,flv-application/octet-stream'; break;
					case 'asf' : sets = 'video/x-ms-asf'; break;
					case 'wmv' : sets = 'audio/x-ms-wmv'; break;
					case 'mp4' : sets = 'video/mp4'; break;
				} if (sets){
					accept += comma; comma = ',';
					accept += sets;
				} 
			});
		} return accept;
	};
	/*!
	* 上传事件
	* @method wscupload_blur, 失去焦点事件
	* @method wscupload_change, 元素内容变更
	* @method wscupload_focus, 激活焦点事件
	* @method wscupload_history, 读取已上传记录
	*/
	$.fn.extend({
		wscupload_blur : function(o, e){
			/*!
			* 异步实时
			* @note 统计已上传数量
			*/
			if (o._files['filter-ajax']){
				return true;
			}
			/*!
			* 错误
			* @note 检查选中与类型支持
			*/
			var r = o.elem.wscupload_valid(o); if (r.errno > 0){
				$.wscfg.form.error_count++; if ($.wscfg.form.error_count == 1){
					$.wscfg.form.error_handle = o.elem;
				} o.elem.wscformsgopen('error', r.error); if (r.errno > 1){
					o.elem.wscupload_clone(o);
				} return false;
			}
			/*!
			* 正确
			*/
			if (r.value){
				o.elem.wscformsgopen('success', $.wscfg.upload.error.file_selected);
			} return true;
		}, 
		wscupload_change : function(o, e){
			var r = o.elem.wscupload_valid(o);
			/*!
			* 出错
			*/
			if (r.errno > 0){
				o.elem.wscformsgopen('error', r.error); if (r.errno > 1){
					o.elem.wscupload_clone(o);
				} return true;
			}
			/*!
			* 正确
			*/
			o.elem.wscformsgclose();
			/*!
			* 异步
			*/
			if (o._files['filter-ajax']){
				if (r.value){
					o.elem.wscupload_clone(o, true);
				} return true;
			}
			/*!
			* 实时
			*/
			o.elem.blur();
		}, 
		wscupload_focus : function(o, e){
			o.elem.wscformsgclose();
		}, 
		wscupload_history : function(o){
			/*!
			* 禁读历史上传
			*/
			if (o.elem.attr('filter-history') == 'false'){
				return;
			}
			/*!
			* 以绑定模式读取
			*/
			var bfield = o.elem.attr('filter-bindfield'); if (bfield){
				return o.elem.wscupload_history_field(o, bfield);
			}
			/*!
			* 动态AJAX读取
			*/
			return o.elem.wscupload_history_select(o);
		}, 
		wscupload_history_field : function(o, f){
			var val = $('input[name="'+f+'"]').val(); if (val){
				$(val.split(',')).each(function(k, v){
					o.elem.wscupload_setprog(o);
					var rv = {};
						rv.uuid = v;
						rv.item = $.wscfg.upload.file_items;
						rv.src = 'http://upload.wudaotv.com/api/video_thumb.php?vkey='+rv.uuid+'&w=100&h=133';
					$('[wscore-upload-item="'+rv.item+'"]').wscupload_setdone(rv).wscload();
				});
			}
		}, 
		wscupload_history_select : function(o){
			var fm = o.elem.get(0); if (fm && fm.form){
				var vs = $(fm.form).find('[name="formsubmit"]'), 
					vf = o.elem.attr('filter-field'); 
				if (vf && vs.length == 1){
					var u = o.elem.attr('filter-history'); if (!u || u == 'true'){
						u = $(fm.form).attr('action') || window.location.href;}
					var a = {url : u, type : 'post', dataType : 'json', data : 'attachmentselect=1&attachmentfield='+vf+'&formsubmit='+vs.val()};
					/*!
					* 读取结果
					*/
					$.fn.require(a, function(_aj, _response){
						if ($.isPlainObject(_response)){
							$.each(_response, function(_rk, _rv){
								if ($.isPlainObject(_rv) && _rv.item){
									o.elem.wscupload_setprog(o);
									_rv.item = $.wscfg.upload.file_items;
									$('[wscore-upload-item="'+_rv.item+'"]').wscupload_setdone(_rv).wscload();
								}
							});
						}
					});
				}
			}
		}
	});	
	/*!
	* 元素克隆
	* @return object, 返回配置
	*         boolean filter-ajax, Ajax模式
	*         action filter-action, 表单提交地址
	*/
	$.fn.wscupload_clone = function(o, _prog){
		var att = o.elem.get(0).attributes, 
			ign = ['inited', 'form-no-ui', 'inited-clone', 'disabled'], 
			htm = '', 
			eid = 'clone-remover-'+$.wscfg.upload.file_inits;
		/*!
		* HTML
		*/
		htm += '<input form-no-ui="true" '; $.wscfg.upload.file_inits++;
		htm += 'inited-clone="'+$.wscfg.upload.file_inits+'" '; if (o.required){
		htm += 'required '; } 
		$.each(att, function(_k, _v){
			if ($.type(_v.name) === 'string'){
				var _app = false; if (_v.name.match(/^filter\-/)){
					_app = true;
				} else if ($.inArray(_v.name, ['id', 'type', 'name', 'class', 'style', 'accept']) != -1){
					_app = true;
				} if (_app){
					htm += _v.name; if (_v.value != ''){
						htm += '="'+_v.value+'"';
					} htm += ' ';
				}
			}
		}); 
		htm += '/>';
		/*!
		* Clone
		*/
		$(htm).insertBefore(o.elem.attr({'id' : eid})).wscforminit(); if (_prog){
			$('#'+eid).wscupload_setprog(o).wscupload_setform(o);
		} else {
			$('#'+eid).remove();
		}
	};
	/*!
	* 合法性检查
	* @return object {
	*     errno : int, 
	*     error : string, 
	*     value : string
	* }
	*/
	$.fn.wscupload_valid = function(o){
		var r = {errno : 0, error : '', value : ''}, 
			v = o.elem.val();
		if (v){
			if ($.type(v) === 'string'){
				var _true = false, 
					_type = o._files['filter-type']; v = v.toLowerCase();
				/*!
				* 类型支持
				*/
				if ($.type(_type) == 'undefined'){
					if (o._files['filter-icon'] == 'image'){
						_type = $.wscfg.upload.extensions.image;
					} else if (o._files['filter-icon'] == 'music'){
						_type = $.wscfg.upload.extensions.music;
					} else if (o._files['filter-icon'] == 'video'){
						_type = $.wscfg.upload.extensions.video;
					}
				}
				/*!
				* 类型检查
				*/
				if (_type && $.type(_type) === 'string'){
					var _typed = /\.([a-z0-9_\-]+)$/i.exec(v) || []; if (_typed.length == 2){
						if (_typed[1] == 'jpeg'){
							_typed[1] = 'jpg';
						} $(_type.toLowerCase().split(',')).each(function(_k, _v){
							_v = $.trim(_v); if (_v == 'jpeg'){
								_v = 'jpg';
							} if (_v === _typed[1]){
								_true = true;
							}
						});
					}
				} else {
					_true = true;
				} if (_true){
					r.value = v;
				} else {
					r.errno = 3;
					r.error = $.wscfg.upload.error.type_denied;
				}
			}
			/*!
			* 无效操作
			*/
			else {
				r.errno = 2;
				r.error = $.wscfg.upload.error.type_denied;
			}
		}
		/*!
		* 未选择文件
		*/
		else {
			if (o.required && !o._files['filter-ajax']){
				r.errno = 1;
				r.error = $.wscfg.upload.error.file_unselect;
			}
		} return r;
	};
	/*!
	* 上传工具
	* @method wscupload_getdata, 读取隐藏域项
	* @method wscupload_setfail, 设置错误提示
	* @method wscupload_setitem, 设置上传结果
	* @method wscupload_setprog, 设置上传进程
	* @method wscupload_setwrap, 设置外围结构
	*/
	$.fn.extend({
		wscupload_getdata : function(o, z){
			var datas = {}, 
				field = o.elem.attr('filter-field');
			/*!
			* 表单参数
			*/
			if (field){
				datas['attachmentfield'] = field; switch (z){
					case 'select' : datas['attachmentselect'] = 1; break;
					case 'delete' : datas['attachmentdelete'] = 1; break;
					case 'resort' : datas['attachmentresort'] = 1; break;
					default : datas['attachmentsubmit'] = 1; break;
				}
				/*!
				* 表单索引
				*/
				var cform = o.elem.get(0).form; if (cform){
					var chide = $(cform).find('[name="formsubmit"]'); if (chide.length == 1){
						datas['formsubmit'] = chide.val();
					}
				}
			}
			/*!
			* URL参数
			*/
			if (o._files['filter-action']){
				var _dataurl = o._files['filter-action']; if ($.type(_dataurl) == 'string'){
					_dataurl.replace(/#(\S*)/, function(_s, _frag){
						if (_frag){
							$(_frag.split('&')).each(function(_fi, _fv){
								var _frags = _fv.split('='); if (_frags.length == 2){
									datas[_frags[0]] = _frags[1];
								}
							});
						}
					});
				}
			} return datas;
		},
		wscupload_setdone : function(c){
			var obj = $(this), o = obj.data('wscore-upload-config'), 
				htm = ''; if (!o || !o.elem){o = {};}
			/*!
			* 图片
			*/
			if (c.image){
				htm += '<div class="wrap">';
					htm += '<img upload-sort-src src="'+$.fn.imgsize(c.src, 100, 100)+'" />';
				htm += '</div>';
				htm += '<div class="elem">';
					htm += '<input upload-sort-text type="text" name="attachment_description'+c.uuid+'" value="'+(c.description || '')+'" placeholder="'+$.wscfg.upload.file_items_placeholder+'" form-no-entrykey="true" />';
				htm += '</div>';
				htm += '<input upload-sort-sort type="hidden" name="attachment_datas_order'+c.uuid+'" value="'+(c.orderid || '0')+'" inited="true" />';
				htm += '<input upload-sort-uuid type="hidden" name="attachment_datas_at[]" value="'+c.uuid+'" inited="true" />';
			}
			/*!
			* 视频|音乐|文件
			*/
			else {
				htm += '<div class="mask '+o._files['filter-icon']+'"><span class="mask-icon"></span>'+(c.src ? '<img upload-sort-src src="'+$.fn.imgsize(c.src, 100, 133)+'" />' : '&#160;')+'</div>';
				htm += '<input upload-sort-text type="hidden" name="attachment_description'+c.uuid+'" value="'+(c.description || '')+'" inited="true" />';
				htm += '<input upload-sort-sort type="hidden" name="attachment_datas_order'+c.uuid+'" value="'+(c.orderid || '0')+'" inited="true" />';
				htm += '<input upload-sort-uuid type="hidden" name="attachment_datas_at[]" value="'+c.uuid+'" inited="true" />';
				/*!
				* 更新绑定
				*/
				var bfield = o.elem.attr('filter-bindfield'); if (bfield){
					var ipt = $('input[name="'+bfield+'"]'), 
						val = ipt.val(), 
						res = [];
					$(val.split(',')).each(function(k, v){
						if (v && v != c.uuid){
							res.push(v);
						}
					}); res.push(c.uuid); ipt.val(res.join(','));
				}
			}
			/*!
			* 更新
			*/
			obj.find('[wscore-upload-delete]').attr('wscore-upload-success', c.uuid);
			obj.find('.prog').remove();
			obj.append(htm);
			return obj;
		},
		wscupload_setfail : function(c){
			var obj = $(this);
				obj.find('div').remove();
				obj.append('<div class="fail"><i></i><p>'+c.error+'</p></div>');
				/*!
				* 自动清除
				*/
				setInterval(function(){
					obj.find('a.drop').attr('wscore-upload-fail', true).click();
				}, $.wscfg.upload.file_autoremove);
			return obj;
		},
		wscupload_setform : function(o){
			var w = o.elem.wscupload_setwrap(o);
			/*!
			* 表单群
			*/
			var _forms = $('#'+$.wscfg.upload.file_form_wrap); if (_forms.length == 0){$('body').append('<div id="'+$.wscfg.upload.file_form_wrap+'" style="display:none" />');
				_forms = $('#'+$.wscfg.upload.file_form_wrap);}
			/*!
			* 隐藏域
			*/
			var _datas = $.fn.wscupload_getdata(o);
			/*!
			* 表单项
			*/
			var _action = o._files['filter-action'] || $.wscfg.upload.stream[o._files['filter-icon']];
				_action = _action || '#';
				utime = new Date().getTime() + Math.random();
			var _post = '';
				_post += '<div wscore-upload-form="'+$.wscfg.upload.file_items+'" class="wsc-form-fileitem wsc-ui-static inline">';
					_post += '<form inited="true" action="'+_action+'" method="post" enctype="multipart/form-data" target="wscore-upload-frame-'+$.wscfg.upload.file_items+'">'; 
					//_post += '<input inited="true" type="hidden" name="UPLOAD_IDENTIFIER" value="'+$.wscfg.upload.file_items+utime+'" />';
					$.each(_datas, function(_fk, _fv){
						_post += '<input inited="true" type="hidden" name="'+_fk+'" value="'+_fv+'" />'; });						
						_post += '<input inited="true" type="hidden" name="filter_item" value="'+$.wscfg.upload.file_items+'" />';
						_post += '<input inited="true" type="hidden" name="filter_time" value="'+utime+'" />';
						_post += '<input inited="true" type="hidden" name="filter_type" value="'+(o._files['filter-type'] || '')+'" />';
						_post += '<input inited="true" type="hidden" name="filter_size" value="'+(o._files['filter-size'] || '0')+'" />';
						_post += '<input inited="true" type="hidden" name="filter_max" value="'+(o._files['filter-max'] || '0')+'" />';
						_post += '<input inited="true" type="hidden" name="filter_min" value="'+(o._files['filter-min'] || '0')+'" />';
						_post += '<input inited="true" type="hidden" name="filter_domain" value="'+document.domain+'" />';
					_post += '</form>';
					_post += '<iframe id="wscore-upload-frame-'+$.wscfg.upload.file_items+'" name="wscore-upload-frame-'+$.wscfg.upload.file_items+'"></iframe>';
				_post += '</div>';
				$(this).unbind().removeData().insertAfter(_forms.append(_post).find('[wscore-upload-form="'+$.wscfg.upload.file_items+'"]').find('input[type="hidden"]').first());
				$.fn.wscupload_progress(_forms,$.wscfg.upload.file_items,_action,utime);
			/*!
			* 返回input元素对象
			*/
			return $(this);
		},
		wscupload_progress : function(o,i,a,u){
			var _form_item = o.find('[wscore-upload-form="'+i+'"] form');
				_form_item.data({
					progtime : null, progress : function(){
						$.fn.require({url : a, data : 'progress=1&item='+i+'&time='+u,dataType : 'json',type : 'post'}, function(_aj, _data){
							if(_data.item) {
								$.fn.wscupload(_data);
							} else {
								_form_item.data('progstart')();
							}
						});
					}, progstart : function(){
						/*!
						* 先清除
						*/
						_form_item.data('progstop')();
						/*!
						* 再定时
						*/
						try{
							var _time = setInterval(function(){
									_form_item.data('progress')();
								}, $.wscfg.upload.file_second
							); _form_item.data('progtime', _time);
						}catch(err){}
					}, progstop : function(){
						/*!
						* 清除定时
						*/
						var _time = _form_item.data('progtime'); if (_time){
							clearInterval(_time);
						} _form_item.data('progtime', null);
					}
				}).submit();
			/*!
			* 延迟抓取状态
			*/
			try{
				_form_item.data('progstart')();
			}catch(err){}
		},
		wscupload_setprog : function(o){
			var w = o.elem.wscupload_setwrap(o), 
				s = o.elem.attr('filter-sortable') != 'false'; $.wscfg.upload.file_items++;
			/*!
			* 强制删除
			*/
			if (w.res.wscupload_force_delete(o)){
				alert($.wscfg.upload.file_items_maximum);
				return false;
			}
			/*!
			* 添加记录
			*/
			var x  = '<div wscore-upload-item="'+$.wscfg.upload.file_items+'" class="wsc-form-fileitem wsc-ui-static inline">';
					x += '<a wscore-upload-delete="'+$.wscfg.upload.file_items+'" href="javascript:void(0)" title="'+$.wscfg.upload.file_items_drop+'" class="drop"></a>'; if (s){
					x += '<a wscore-upload-sortable href="javascript:void(0)" title="'+$.wscfg.upload.file_items_sortable+'" class="sort"></a>'; }
					x += '<div class="prog"><i></i><p>'+$.wscfg.upload.file_items_progress+'</p></div>';
				x += '</div>';
			$(x).insertBefore(w.fm); w.res.wscupload_force_hider(o);
			/*!
			* 绑定配置
			*/
			w.res.find('[wscore-upload-item="'+$.wscfg.upload.file_items+'"]').data('wscore-upload-config', o).find('[wscore-upload-delete]').unbind('click').click(function(){
				$(this).wscupload_submit_delete(o);
			});
			/*!
			* 允许排序
			*/
			if (s){
				w.res.sortable({
					handle : '[wscore-upload-sortable]', placeholder : 'wsc-form-fileitem wsc-ui-static inline', stop : function(){
						w.res.wscupload_submit_resort(o);
					}
				});
			}
			/*!
			* 返回input元素对象
			*/
			return $(this);
		},
		/*!
		* 外围结构
		* @return object jQuery-Selector[DIV]
		*/
		wscupload_setwrap : function(o){
			var f = o.elem.parent().parent(), 
				r = f.parent(), 
				a = r.attr('wscore-upload-result');
			if ($.type(a) == 'undefined'){
				f.attr({'wscore-upload-form' : true, 'sortable-ignore' : true}).wrap('<div wscore-upload-result class="wsc-form-fileitems wsc-ui-static inline" />');
				r = f.parent();
			} return {
				fm : f, 
				res : r
			};
		}
	});
	/*!
	* 后序操作
	*/
	$.fn.extend({
		wscupload_force_delete : function(o){
			var obj = $(this);
			/*!
			* 唯一记录
			* @note 自动删除原记录
			*/
			if (o._max == 1){
				obj.find('[wscore-upload-delete]').click();
			}
			/*!
			* 最大数量检查
			*/
			else if (o._max > 1){
				var len = obj.find('[wscore-upload-item]').length; if (len >= o._max){
					return true;
				}
			} return false;
		},
		wscupload_force_hider : function(o){
			if (o._max > 0){
				var obj = $(this), 
					len = obj.find('[wscore-upload-item]').length >= o._max;
				if (len){
					obj.find('[wscore-upload-form]').css('display', 'none');
					return;
				} obj.find('[wscore-upload-form]').removeAttr('style');
			}
		},
		wscupload_submit_delete : function(o){
			var obj = $(this), 
				item = obj.parent(),
				formid = item.attr('wscore-upload-item');
			/*!
			* AJAX请求
			*/
			var uuid = obj.attr('wscore-upload-success'); if (uuid){
				var bfield = o.elem.attr('filter-bindfield');
				/*!
				* 清理绑定
				*/
				if (bfield){
					var nset = [], 
						nobj = $('input[name="'+bfield+'"]'), 
						nval = nobj.val();
					$(nval.split(',')).each(function(k, v){
						if (v != uuid){
							nset.push(v);
						}
					}); nobj.val(nset.join(','));
				}
				/*!
				* AJAX请求
				*/
				else {
					var datas = $.fn.wscupload_getdata(o, 'delete');
						datas['attachmentdatas'] = uuid;
					$.fn.require({url : o._files['filter-action'], data : datas, dataType : 'json', type : 'post'});
				}
			}
			/*!
			* 隐藏并移除
			*/
			item.hide($.wscfg.upload.file_speed, function(){
				var res = item.parent(); item.remove();
					res.wscupload_force_hider(o);
					var _formelem = $('[wscore-upload-form="'+formid+'"]');
						_formelem.find('form').removeData('progress');
					_formelem.remove();
			});
		}, 
		wscupload_submit_resort : function(o){
			var obj = $(this), 
				obi = 0, 
				obd = [], 
				arr = [];
			obj.find('[wscore-upload-item]').each(function(){
				var tmp = $(this); arr.push(tmp.find('[upload-sort-uuid]').val()); obi++; obd.push({
					'datas_at' : tmp.find('[upload-sort-uuid]').val(), 
					'datas_order' : obi, 
					'datas_description' : tmp.find('[upload-sort-text]').val()
				}); tmp.find('[upload-sort-sort]').val(obi);
			});
			/*!
			* 排序
			*/
			var bfield = o.elem.attr('filter-bindfield'); if (bfield){
				$('input[name="'+bfield+'"]').val(arr.join(','));
			} else {
				var datas = $.fn.wscupload_getdata(o, 'resort');
					datas['attachmentdatas'] = obd;
					$.fn.require({url : o._files['filter-action'], data : datas, dataType : 'json', type : 'post'});
			}
		}
	});
})(jQuery);

/*! @source "js/plugins/util.js" */

/*!
*	q my star 公用js工具包
*	$.fn.functionName() 调用
*/
(function($){
	$.fn.extend({
		/*!
		*	发布话题选项排列方法
		*/
		topicReleaseReorder: function(box){
			/*!
			*	求助问答checkbox
			*/
			var topictype = box.find('input[name="topictype[]"]').parent().parent();
			/*!
			*	移动到标题框右侧
			*/
			topictype.appendTo(box.find('[td_4]')).css({
				'marginLeft':'+=10',
				'position': 'relative',
				'bottom' : '-5px'
			});


			var all_radio = box.find('label.radio-on').parent().parent();
			var all_radio_off = box.find('label.radio-off').parent().parent();
			var classify = $(all_radio.filter(function(i){
				if ($(this).find('input[name="classify"]').length >= 1) {
					return true;
				} else {
					return false;
				}
			}).get());
			var isunify = $(all_radio.filter(function(i){
				if ($(this).find('input[name="isunify"]').length >= 1) {
					return true;
				} else {
					return false;
				}
			}).get());
			var classify_off = $(all_radio_off.filter(function(i){
				if ($(this).find('input[name="classify"]').length >= 1) {
					return true;
				} else {
					return false;
				}
			}).get());
			var isunify_off = $(all_radio_off.filter(function(i){
				if ($(this).find('input[name="isunify"]').length >= 1) {
					return true;
				} else {
					return false;
				}
			}).get());
			/*!
			* 重新排列 radio
			*/
			var classify_list = box.find('input[name="classify"]').parent().parent().parent();
			var isunify_list = box.find('input[name="isunify"]').parent().parent().parent();
			classify.appendTo(classify_list).last().after('<span class="more pink">更多</span>');
			classify_off.appendTo(classify_list).hide();
			isunify.appendTo(isunify_list).last().after('<span class="more pink">更多</span>');
			isunify_off.appendTo(isunify_list).hide();
			/*!
			*	checkbox
			*/
			var filtermax = null;
			var checkOn = box.find('label.checkbox-on').parent().parent();
			var checkOff = box.find('label.checkbox-off').parent().parent();
			/*!
			*	append
			*/
			checkOn = $(checkOn.filter(function(i){
				if ($(this).find('input[filter-max]').length >= 1) {
					filtermax = $(this).find('input').attr('filter-max');
				}
				if ($(this).find('input[name="topictype[]"]').length >= 1) {
					return false;
				} else {
					return true;
				}
			}).get());
			var filtermin,filtermax;
			checkOn.appendTo(checkOn.parent()).last().after('<span class="more pink">更多</span>');
			checkOff = $(checkOff.filter(function(i){
				if ($(this).find('input[filter-max]').length >= 1) {
					filtermax = $(this).find('input').attr('filter-max');
				}
				if ($(this).find('input[filter-min]').length >= 1) {
					filtermin = $(this).find('input').attr('filter-min');
				}
				if ($(this).find('input[name="topictype[]"]').length >= 1) {
					return false;
				} else {
					return true;
				}
			}).get());
			/*!
			*	重新初始化checkbox事件
			*/
			if (checkOn.length >= 1) {
				checkOn.first().find('input').attr({
					'filter-max' : filtermax || 3,
					'filter-min' : filtermin || 0,
					'inited' : null,
					'form-no-ui' : true
				}).wscforminit();
				checkOff.appendTo(checkOff.parent()).hide();				
			}
			/*!
			*	event
			*/
			checkOn.parent().find('span.more').click(function(){
				$(this).remove();
				checkOff.show();
			});	
			classify_list.find('span.more').click(function(){
				$(this).remove();
				classify_off.show();
			});
			isunify_list.find('span.more').click(function(){
				$(this).remove();
				isunify_off.show();
			});

			/*!
			*	recheck
			*/
			if (classify.length <= 0) {
				classify_off.show();
			}
			if (isunify.length <= 0) {
				isunify_off.show();
			}
			if (checkOn.length <= 0) {
				checkOff.show();
			}
			/*!
			*	restyle
			*/
			$(this).styleset(box);
		},
		/*!
		*	发布话题框内选项重新排列
		*/
		topicReleaseFilter: function(obj){
			var func = $(this);
			if (obj == undefined) {
				/*!
				*	对话框形式回调
				*/
				var dialogArr = [
					/*!
					*	对话框类触发链接放在这里
					*/
					$('#js-release[dialog]'),
					$('#js-release-topic[dialog]'),
					$('.editor')
				];
				$.each(dialogArr,function(i,obj){
					obj = $(obj) || null;
					if (obj == null) {return;}
					obj.data({
						'dialog-stop' : function(box){
							box = box._boxbody;
							func.topicReleaseReorder(box);
						}
					});					
				});
				/*!
				*	ajax形式回调
				*/
				var ajaxArr = [
					/*!
					*	将ajax类触发链接放在这里
					*/
					$('[action="topic-release"]')
				];
				$.each(ajaxArr,function(i,obj){
					obj = $(obj) || null;
					if (obj == null) {return;}

					obj.data({
						'ajax-stop' : function(obj, setting, response){
							box = obj.attr('ajax-selector');
							box = $(box);	
							func.topicReleaseReorder(box);	
						}
					});					
				}); 
			} else {
				var box = obj || null;
				if (box == null) {return;}
				func.topicReleaseReorder(box);
			}
			/*!
			*	重新初始化表格样式
			*/
			func.styleset(obj);
			return obj;
		},
		/*!
		*	td64 restyle
		*/
		styleset : function(box){
			box = box || null;
			if (box == null) {
				$('.u_form').find('[td_64] .check-list .wsc-form').each(function(i){
					$(this).find('.wsc-form-checks-text').css({'width' : 65});
				});				
			} else {
				box.find('[td_64] .check-list .wsc-form').each(function(i){
					$(this).find('.wsc-form-checks-text').css({'width' : 65});
				});	
			}
		}
	});
})(jQuery);


/*! @source "js/plugins/validator.js" */

/*!
* 格式验证
*/
(function($){
	/*! 验证 */
	$.fn.extend({
		/*!
		* 全中文
		*/
		ischinese : function(s){
			return s.match(/^([\u4e00-\u9fa5]+)$/) ? s : null;
		},
		/*!
		* 日期格式化
		* @return object {
		*     y : int, // 年份, eg: 1900-2100
		*     m : int, // 月份, eg: 1-12
		*     d : int, // 日期, eg: 1-31
		*     w : int, // 天数: eg: 1-31
		*     p : int, // 起点, eg: 0-6, 每个月的1号是星期几
		*     i : int, // 整型, eg: 20140101
		*     s : string // 日期, eg: 2014-01-01
		* }
		*/
		isdate : function(s, _week){
			var r = {y : 0, m : 0, d : 0, w : 0, p : 0, i : 0, im : 0, s : ''}; if (s && s.toString() != ''){
				/*!
				* 格式1
				* @example 20140101
				*/
				if (s.match(/^[0-9]{8}$/)){
					r.y = s.substr(0, 4); r.y = parseInt(r.y);
					r.m = s.substr(4, 2); r.m = parseInt(r.m);
					r.d = s.substr(6, 2); r.d = parseInt(r.d);
				}
				/*!
				* 格式2
				* @example 2014 1 1
				* @example 2014-1-1
				* @example 2014/1/1
				* @example 2014\1\1
				*/
				else {
					var i = 0; 
						s = s.replace(/(\s)/g, '-').replace(/\//g, '-').replace(/\\/g, '-'); 
					$(s.split('-')).each(function(_k, _v){
						if (_v && _v.toString().match(/^([0-9]+)$/)){
							_v = _v * 1; i++; switch (i){
								case 1 : r.y = _v; break;
								case 2 : r.m = _v; break;
								case 3 : r.d = _v; break;
							}
						}
					});
				}
				/*!
				* 日期有效
				*/
				if (r.y >= 1900 && r.y <= 2100 && r.m > 0 && r.d > 0){
					/*!
					* 月份
					*/
					r.m = Math.min(r.m, 12);
					/*!
					* 日期
					*/
					r.w = 31;
					r.d = Math.min(r.d, r.w); if (r.m == 2){
						r.w = 28; if (r.y % 4 == 0){
							if (r.y % 100 > 0 || r.y % 400 == 0){
								r.w = 29;
							}
						} r.d = Math.min(r.d, r.w);
					} else if (r.m == 4 || r.m == 6 || r.m == 9 || r.m == 11){
						r.w = 30;
						r.d = Math.min(r.d, r.w);
					}
					/*!
					* 整型
					*/
					r.i = r.y * 10000 + r.m * 100 + r.d;
					r.im = r.y * 100 + r.d;					
					/**
					* 1号的星期数
					*/
					if (_week){
						var _date = new Date();
							_date.setYear(r.y);
							_date.setMonth(r.m-1, 1);
						r.p = _date.getDay();
					}
				}
				/*!
				* 无效日期
				*/
				if (r.i == 0){
					r.y = r.m = r.d = r.w = 0;
				} else {
					r.s  = r.y.toString();
					r.s += '-';
					r.s += (r.m < 10 ? '0' : '') + r.m.toString();
					r.s += '-';
					r.s += (r.d < 10 ? '0' : '') + r.d.toString();
				}
			} return r;
		},
		/*!
		* 计算日期范围
		* @return object, 与isdate方法相同
		*/
		isdatescope : function(s, _scope){
			/*!
			* 范围格式
			* @example -18y 1M 1D, 即18年前的1月1日
			*/
			var r = {i : 0}, _un_scope = true; if (_scope){
				_scope = _scope.toString(); if (_scope.match(/([\-]*)(\d+)[a-z]/i)){
					_un_scope = false;
				}
			} if (_un_scope){
				return r;
			}
			/*!
			* 参照标准
			*/
			var _type = $.type(s), _un_plain = true; if (_type == 'string'){
				s = $.fn.isdate(s);
			} else if (_type != 'object'){
				s = $.fn.isdate($.wscfg.today.y + '-' + $.wscfg.today.m + '-' + $.wscfg.today.d);
			} if ($.isPlainObject(s)){
				_un_plain = false;
			} if (_un_plain){
				return r;
			}
			
			/*!
			* 正则匹配
			*/
			var _r = /([\-]*)(\d+)[a-z]/ig, 
				_a = _scope.toString().replace(/ /g, '').match(_r) || [], 
				_i = 0;
			$(_a).each(function(_k, _v){
				var __t = _v.replace(/([0-9\-]+)/g, ''), 
					__n = _v.replace(/([a-z]+)/i, ''); __n *= 1;
				switch (__t){
					case 'y' : s.y += __n; _i++; break;
					case 'Y' : s.y  = __n; _i++; break;
					case 'm' : s.m += __n; _i++; break;
					case 'M' : s.m  = __n; _i++; break;
					case 'd' : s.d += __n; _i++; break;
					case 'D' : s.d  = __n; _i++; break;
				}
			});
			/*!
			* 新日期
			*/
			if (_i > 0){
				var _date = new Date();
					_date.setYear(s.y);
					_date.setMonth(s.m-1, s.d);
				var _news  = _date.getFullYear();
					_news += '-' + (_date.getMonth() + 1);
					_news += '-' + _date.getDate();
				r = $.fn.isdate(_news);
			}
			/*!
			* 返回
			*/
			return r;
		},
		/*! 邮箱格式(小写) */
		isemail : function(s){
			var r = ''; if (s && $.type(s) == 'string'){
				var s = s.replace(/#/g, '@'), 
					e = /^([a-z0-9_\.\-]+)@([a-z0-9_\.\-]+)\.([a-z]+)$/i;
				if (e.exec(s)){
					r = s.toLowerCase();
				}
			} return r;
		},
		/*! 手机 */
		ismobile : function(s){
			var r = ''; if (s != '' && /^1[3-8][0-9]{9}$/.exec(s)){
				r = s;
			} return r;
		},
		/*! 月份
		* <code>10 1</code>
		* <code>10 01</code>
		* <code>10-1</code>
		* <code>10-01</code>
		* <code>10/1</code>
		* <code>10/01</code>
		* <code>10\01</code>
		*/
		ismonth : function(s){
			var o = {i : 0, s : ''}, r = ''; if (s != ''){
				/**
				* 格式化
				*/
				if (s.match(/[0-9]{6}/)){
					s = s.substr(0, 4) + '-' + s.substr(4, 2);
				} s = s.replace(/[\||\-|\/|\\\+,;:]/g, ' ');
				/**
				* 解析
				*/
				var _e = /([0-9]+)\s+([0-9]+)/, 
					_m = _e.exec(s) || [];
				if (_m.length >= 3){
					_m[1] = parseInt(_m[1]);
					_m[2] = parseInt(_m[2]);
					if (_m[1] >= 1900 && _m[1] <= 2100 && _m[2] >= 1 && _m[2] <= 12){
						if (_m[1] < 10){
							r += '0';
						} r += _m[1]; r += '-'; if (_m[2] < 10){
							r += '0';
						} r += _m[2];
						o.i  = _m[1] * 100;
						o.i += _m[2];
						o.s  = r;
					}
				}				
			} return o;
		},
		/*!
		* 常规电话
		* @param string s, 电话格式
		*                  eg: 10086
		*                  eg: 025-10086
		*                  eg: 400-6666-666
		*                  eg: 88888888
		*                  eg: 025-88888888
		*                  eg: 025-88888888-8888
		* @return string s, 验证后(半角/数字)
		*/
		istel : function(s){
			/**
			* 字符
			*/
			if (s){
				s = $.fn.full2half(s);
				s = s.replace(/ /g, '');
			} if (!s){
				return;
			}
			/**
			* 格式
			*/
			var rln = s.length, 
				res = {ac : '', no : '', ex : ''};
			if (s.match(/^0[1-2]/)){
				res.ac = s.substr(0, 3);
				res.no = s.substr(3, rln-3);
			} else if (s.match(/^0[3-9][0-9]{2}/)){
				res.ac = s.substr(0, 4);
				res.no = s.substr(4, rln-4);
			} else {
				res.no = s;
			}
			/**
			* 匹配
			*/
			if (res.no != ''){
					res.no = res.no.replace(/(,|;|:|\.|\+|\-)/g, '');
				var em0 = /^(4|8)00([0-9]{7})$/, 
					em1 = /^[1-9][0-9]{4}$/, 
					em2 = /^[2-9][0-9]{6,7}$/, 
					em3 = /^[2-9][0-9]{6,7}[1-9][0-9]{3}$/, 
					suc = false;
				if (res.no.match(em0) || res.no.match(em1) || res.no.match(em2)){
					suc = true;
				} else if (res.no.match(em3)){
					res.ex = res.no.substr(res.no.length-4, 4);
					res.no = res.no.substr(0, res.no.length-4);
					suc = true;
				} if (suc){
					var tel = ''; if (res.ac != ''){
						tel += res.ac+'-'; } 
						tel += res.no; if (res.ex){
						tel += '-' + res.ex; }
					return tel;
				}
			} return;
		},
		/*! 时间
		* <code>10 1</code>
		* <code>10 01</code>
		* <code>10-1</code>
		* <code>10-01</code>
		* <code>10/1</code>
		* <code>10/01</code>
		* <code>10\01</code>
		*/
		istime : function(s){
			var r = ''; if (s && s != ''){
				/**
				* 格式化
				*/
				if (s.match(/[0-9]{4}/)){
					s = s.substr(0, 2) + ':' + s.substr(2, 2);
				} s = s.replace(/[\||\-|\/|\\\+,;:]/g, ' ');
				/**
				* 解析
				*/
				var _e = /([0-9]+)\s+([0-9]+)/, 
					_m = _e.exec(s) || [];
				if (_m.length >= 3){
					_m[1] = parseInt(_m[1]);
					_m[2] = parseInt(_m[2]);
					if (_m[1] >= 0 && _m[1] <= 23 && _m[2] >= 0 && _m[2] <= 59){
						if (_m[1] < 10){
							r += '0';
						} r += _m[1]; r += ':'; if (_m[2] < 10){
							r += '0';
						} r += _m[2];
					}
				}
			} return r;
		},
		/*! 网址
		* <code>www.example.com</code>
		*/
		isurl : function(s){
			if (s && s != ''){
				/*!
				* 强制HTTP协议
				*/
				if (!s.match(/^([a-z]+):\/\//i)){
					s = 'http://'+s;
				}
				/*!
				* 域名检查
				*/
				var o = $.fn.urlobj(s); if (o.hostname){
					/*!
					* 纯IP时
					*/
					var ips = /^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)$/.exec(o.hostname) || []; if (ips.length){
						ips[1] = parseInt(ips[1]);
						ips[2] = parseInt(ips[2]);
						ips[3] = parseInt(ips[3]);
						ips[4] = parseInt(ips[4]);
						if (ips[1] < 256 && ips[2] < 256 && ips[3] < 256 && ips[4] < 256){
							return o.href;
						}
					}
					/*!
					* 域名格式检查
					*/
					if (o.hostname.match(/(.*)\.([a-z]+)$/)){
						return o.href;
					}
				}
			} return '';
		}, 
		isweek : function(s){
			return s;
		}
	});
})(jQuery);